JavaScript Hoisting
Hoisting হল জাভাস্ক্রিপ্টের ডিফল্ট ডিক্লেয়ারেশনকে উপরে নিয়ে যাওয়ার আচরণ।
JavaScript Declarations are Hoisted
জাভাস্ক্রিপ্টে, একটি ভেরিয়েবল ব্যবহার করার পরে ঘোষণা করা যেতে পারে।
অন্য কথায়; একটি পরিবর্তনশীল ঘোষণা করার আগে ব্যবহার করা যেতে পারে।
উদাহরণ 1 উদাহরণ 2 এর মতো একই ফলাফল দেয়:
উদাহরণ 1
x = 5; // 5 থেকে x বরাদ্দ করুন elem = document.getElementById("ডেমো"); // একটি উপাদান খুঁজুন elem.innerHTML = x; // এলিমেন্টে x প্রদর্শন করুন var x; // ঘোষণা x
উদাহরণ 2
var x; // ঘোষণা x x = 5; // 5 থেকে x বরাদ্দ করুন elem = document.getElementById("ডেমো"); // একটি উপাদান খুঁজুন elem.innerHTML = x; // এলিমেন্টে x প্রদর্শন করুন
এটি বোঝার জন্য, আমাদের "উত্তোলন" শব্দটি বুঝতে হবে।
উত্তোলন হল জাভাস্ক্রিপ্টের ডিফল্ট আচরণ যা সমস্ত ঘোষণাকে বর্তমান সুযোগের উপরে (বর্তমান স্ক্রিপ্ট বা বর্তমান ফাংশনের উপরে) স্থানান্তরিত করে।
The let and const Keywords
let এবং const দিয়ে সংজ্ঞায়িত ভেরিয়েবলগুলি ব্লকের উপরে উত্তোলন করা হয়, কিন্তু আরম্ভ করা হয় না।
অর্থ: কোডের একটি ব্লক একটি পরিবর্তনশীল সম্পর্কে সচেতন, তবে এটি ঘোষণা না করা পর্যন্ত এটি ব্যবহার করতে পারে না।
এটি ঘোষণা করার আগে একটি let ভেরিয়েবল ব্যবহার করলে একটি রেফারেন্স ত্রুটি দেখা দেবে।
একটি ভেরিয়েবল ব্লকের শুরু থেকে ঘোষণা না হওয়া পর্যন্ত একটি "অস্থায়ী মৃত অঞ্চলে" থাকে:
উদাহরণ
এটি একটি রেফারেন্স ত্রুটির দিকে পরিচালিত করবে:
carName = "Volvo";
let carName;
ঘোষণা করার আগে একটি কনস্ট ভেরিয়েবল ব্যবহার করা একটি সিনট্যাক্স ত্রুটি, তাই কোডটি চলবে না।
উদাহরণ
এই কোড কাজ করবে না.
carName = "Volvo";
const carName;
JS Let/Const-এ let এবং const সম্পর্কে আরও পড়ুন।
JavaScript Initializations are Not Hoisted
জাভাস্ক্রিপ্ট শুধুমাত্র ঘোষণা তুলে ধরে, আরম্ভ করে না।
উদাহরণ 1 উদাহরণ 2 এর মতো একই ফলাফল দেয় না:
উদাহরণ 1
var x = 5; // x আরম্ভ করুন var y = 7; // শুরু করুন y elem = document.getElementById("ডেমো"); // একটি উপাদান খুঁজুন elem.innerHTML = x + "" + y; // প্রদর্শন x এবং y
উদাহরণ 2
var x = 5; // x আরম্ভ করুন elem = document.getElementById("ডেমো"); // একটি উপাদান খুঁজুন elem.innerHTML = x + "" + y; // প্রদর্শন x এবং y var y = 7; // শুরু করুন y
শেষ উদাহরণে y-কে অনির্ধারিত করা কি বোঝায়?
এর কারণ হল শুধুমাত্র ঘোষণা (var y), আরম্ভ (=7) নয়, উপরে উত্তোলন করা হয়েছে।
উত্তোলনের কারণে, y ব্যবহার করার আগে ঘোষণা করা হয়, কিন্তু যেহেতু আরম্ভগুলি উত্তোলন করা হয় না, তাই y-এর মান অনির্ধারিত।
উদাহরণ 2 লেখার অনুরূপ:
উদাহরণ
var x = 5; // x আরম্ভ করুন var y; // ঘোষণা y elem = document.getElementById("ডেমো"); // একটি উপাদান খুঁজুন elem.innerHTML = x + "" + y; // প্রদর্শন x এবং y y = 7; // বরাদ্দ 7 থেকে y
Declare Your Variables At the Top!
Hoisting হল (অনেক ডেভেলপারদের কাছে) জাভাস্ক্রিপ্টের একটি অজানা বা উপেক্ষা করা আচরণ।
যদি একজন ডেভেলপার উত্তোলন বুঝতে না পারে, তাহলে প্রোগ্রামে বাগ (ভুল) থাকতে পারে।
ত্রুটি এড়াতে, সর্বদা প্রতিটি সুযোগের শুরুতে সমস্ত ভেরিয়েবল ঘোষণা করুন।
এটি সর্বদা একটি ভাল নিয়ম, কারণ জাভাস্ক্রিপ্ট কোডকে এভাবে ব্যাখ্যা করা হয়।
টিপ:
জাভাস্ক্রিপ্ট কঠোর মোডে ভেরিয়েবল ব্যবহার করার অনুমতি দেয় না যদি না সেগুলি ঘোষণা করা হয়। পরবর্তী অধ্যায়ে "সঠিক ব্যবহার করুন" পড়ুন।
Exercise
নিম্নলিখিত কোড বিবেচনা করুন:
x = 5;
alert(x);
var x;
সতর্কতার ফল কী হবে?