এই ঘটনাটি হিসাবে পরিচিত: জাভাস্ক্রিপ্ট ভেরিয়েবল উত্তোলন ।
কোনও বিন্দুতে আপনি আপনার ফাংশনে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করছেন না; আপনি কেবল স্থানীয় value
ভেরিয়েবল অ্যাক্সেস করছেন ।
আপনার কোডটি নিম্নলিখিতগুলির সমতুল্য:
var value = 10;
function test() {
var value;
console.log(value);
value = 20;
console.log(value);
}
test();
তবুও অবাক হচ্ছেন আপনি পাচ্ছেন undefined
?
ব্যাখ্যা:
এটি এমন কিছু যা প্রতিটি জাভাস্ক্রিপ্ট প্রোগ্রামার শীঘ্রই বা পরে প্রবেশ করে into সহজ কথায় বলতে গেলে, আপনি যে পরিবর্তনশীল ঘোষণা করেন তা সর্বদা আপনার স্থানীয় বন্ধের শীর্ষে উত্তোলন করা হয়। সুতরাং, প্রথম console.log
কলের পরেও আপনি আপনার ভেরিয়েবল ঘোষণা করলেও , এখনও এটি বিবেচনা করা হয়েছিল যেন আপনি তার আগে এটি ঘোষণা করেছিলেন।
তবে, কেবল ঘোষণার অংশটি উত্তোলন করা হচ্ছে; অন্যদিকে, অ্যাসাইনমেন্টটি নয়।
সুতরাং, যখন আপনি প্রথম কল করেছিলেন console.log(value)
, আপনি স্থানীয়ভাবে ঘোষিত ভেরিয়েবলটি উল্লেখ করছেন, যা এখনও এর কাছে নির্ধারিত কিছুই পায় নি; অত: পর undefined
।
এখানে আরও একটি উদাহরণ :
var test = 'start';
function end() {
test = 'end';
var test = 'local';
}
end();
alert(test);
আপনি কি মনে করেন এটি কি সতর্ক করবে? না, শুধু পড়ুন না, এটি সম্পর্কে চিন্তা করুন। এর মান কী test
?
আপনি ব্যতীত অন্য কিছু বললে start
, আপনি ভুল ছিল। উপরের কোডটি এর সমতুল্য:
var test = 'start';
function end() {
var test;
test = 'end';
test = 'local';
}
end();
alert(test);
যাতে বিশ্বব্যাপী পরিবর্তনশীল কখনই প্রভাবিত না হয়।
আপনি দেখতে পাচ্ছেন, আপনি যেখানে আপনার পরিবর্তনশীল ঘোষণা রেখেছেন তা বিবেচনা না করেই এটি আপনার স্থানীয় বন্ধের শীর্ষে সর্বদা উত্তোলন করা হয়।
সাইড নোট:
এটি ফাংশনগুলির ক্ষেত্রেও প্রযোজ্য।
কোডের এই অংশটি বিবেচনা করুন :
test("Won't work!");
test = function(text) { alert(text); }
যা আপনাকে একটি রেফারেন্স ত্রুটি দেবে:
আনকড রেফারেন্স এরির: পরীক্ষা সংজ্ঞায়িত করা হয় নি
কোডটির এই অংশটি সূক্ষ্মভাবে কাজ করে বলে এটি অনেকগুলি বিকাশকারীকে ছুঁড়ে দেয় :
test("Works!");
function test(text) { alert(text); }
এই জন্য কারণ, যেমন বিবৃত কারণ নিয়োগ অংশ হয় না উত্তোলন করেন। সুতরাং প্রথম উদাহরণে, কখন test("Won't work!")
চালানো হয়েছিল, test
ভেরিয়েবলটি ইতিমধ্যে ঘোষিত হয়েছে, তবে এখনও এটি কার্য সম্পাদন করতে পারে নি।
দ্বিতীয় উদাহরণে, আমরা ভেরিয়েবল অ্যাসাইনমেন্ট ব্যবহার করছি না। এর পরিবর্তে, আমরা সঠিক ফাংশন ঘোষণা সিনট্যাক্স, যা ব্যবহার করছেন না ফাংশন সম্পূর্ণরূপে উত্তোলন পেতে।
বেন চেরি এ সম্পর্কে একটি দুর্দান্ত নিবন্ধ লিখেছেন, যথাযথভাবে শিরোনামে জাভাস্ক্রিপ্ট স্কোপিং এবং হোস্টিং ।
এটি পড়ুন। এটি পুরো বিবরণ আপনাকে পুরো ছবি দেবে।