একটি পার্থক্য আছে ।
var x = 1 xবর্তমান স্কোপে ভেরিয়েবল ঘোষণা করে (ওরফে এক্সিকিউশন কনটেক্সট)। যদি কোনও কার্যক্রমে ঘোষণাটি প্রকাশিত হয় - একটি স্থানীয় ভেরিয়েবল ঘোষণা করা হয়; যদি এটি বিশ্বব্যাপী সুযোগে থাকে - একটি বৈশ্বিক চলক ঘোষণা করা হয়।
x = 1অন্যদিকে, এটি কেবল একটি সম্পত্তি বরাদ্দ। এটি প্রথমে xস্কোপ চেইনের বিরুদ্ধে সমাধান করার চেষ্টা করে । যদি এটি স্কোপ চেইনে এটি কোথাও খুঁজে পাওয়া যায়, তবে এটি কার্য সম্পাদন করে; যদি এটি না খুঁজে পাওয়া যায় xতবে কেবলমাত্র এটি xবিশ্বব্যাপী কোনও সামগ্রীতে সম্পত্তি তৈরি করে (যা স্কোপ চেইনে শীর্ষ স্তরের একটি বিষয়)।
এখন লক্ষ্য করুন যে এটি বৈশ্বিক পরিবর্তনশীল ঘোষণা করে না, এটি একটি বিশ্বব্যাপী সম্পত্তি তৈরি করে।
উভয়ের মধ্যে পার্থক্যটি সূক্ষ্ম এবং বিভ্রান্তিকর হতে পারে যদি না আপনি বুঝতে পারেন যে পরিবর্তনশীল ঘোষণাগুলিও বৈশিষ্ট্য তৈরি করে (কেবলমাত্র একটি ভেরিয়েবল অবজেক্টে) এবং জাভাস্ক্রিপ্টের প্রতিটি সম্পত্তি (ভাল, ইসমাস্ক্রিপ্ট) নির্দিষ্ট পতাকা রয়েছে যা তাদের বৈশিষ্ট্যগুলি বর্ণনা করে - কেবলমাত্র পড়ুন, ডন্টইনম এবং DontDelete।
যেহেতু ভেরিয়েবল ডিক্লেয়ারেশন ডন্টডিলিট পতাকা সহ সম্পত্তি তৈরি করে, var x = 1এবং x = 1(বৈশ্বিক স্কোপে কার্যকর করা হলে) এর মধ্যে পার্থক্যটি হ'ল প্রাক্তনটি - পরিবর্তনশীল ঘোষণা - ডন্টডিলিট'এল সম্পত্তি তৈরি করে, এবং পরবর্তীটি তা করে না। ফলস্বরূপ, এই অন্তর্নিহিত অ্যাসাইনমেন্টের মাধ্যমে তৈরি সম্পত্তি বিশ্বব্যাপী অবজেক্ট থেকে মুছে ফেলা যেতে পারে এবং পূর্বের এক - পরিবর্তনশীল ঘোষণার মাধ্যমে তৈরি করা - মুছা যায় না।
তবে এটি অবশ্যই তত্ত্ব, এবং বাস্তবে বাস্তবায়নের ক্ষেত্রে বিভিন্ন বাগের কারণে (যেমন আইআই থেকে প্রাপ্ত) দুজনের মধ্যে আরও বেশি পার্থক্য রয়েছে ।
আশা করি এটি সমস্ত অর্থবোধ করে:)
[আপডেট 2010/12/16]
ES5- এ (ECMAScript 5; সম্প্রতি প্রমিত, ভাষার 5 তম সংস্করণ) একটি তথাকথিত "কঠোর মোড" রয়েছে - একটি অপ্ট-ইন ভাষা মোড, যা অঘোষিত অ্যাসাইনমেন্টগুলির আচরণকে সামান্য পরিবর্তন করে। কঠোর মোডে, একটি অঘোষিত শনাক্তকারীকে বরাদ্দকরণ হল একটি রেফারেন্সরর । এর যুক্তিটি ছিল দুর্ঘটনাজনিত কার্যভার ধরা, অবাঞ্ছিত বিশ্বব্যাপী সম্পত্তি রোধ করা। নতুন কিছু ব্রাউজার ইতিমধ্যে কঠোর মোডের জন্য রোলিং সমর্থন শুরু করেছে। উদাহরণস্বরূপ, আমার কমপ্যাট টেবিলটি দেখুন ।