Q2. Explain the concept of hoisting in JavaScript.
ঘোষণা উপরে টেনে আনার নিয়মটা কী, আর কেন var কাজ করে কিন্তু let ও const ধরা পড়ে।
Hoisting মানে JavaScript কোড চালানোর আগেই সেই কোডের var আর function declaration ঘোষণাগুলো উপরে তুলে আনে। ফলে সেগুলো কোডে নিচে লেখা থাকলেও উপরে ব্যবহার করা যায় — শুধু তৈরি হওয়ার সময়টা আগে হয়।
console.log(message); // undefined — error নয়!
var message = "Hello";
sayHi(); // ✅ কাজ করে
function sayHi() {
console.log("Hi!");
}ধাপে ধাপে দেখি কী ঘটছে। প্রথমে ইঞ্জিন কোডটি উপরে উঠিয়ে একটা রূপান্তরিত সংস্করণ বানায় — var message উপরে চলে আসে, তবে তার মান থাকে না, তাই মান undefined হয়ে যায়। আর function declaration পুরোটাই উপরে উঠে আসে, তাই sayHi() ডাকা যায়।
দ্বিতীয় ধাপে কোড লাইনে লাইনে চলে। তখন var message = "Hello" এসে মান বসায়, আর sayHi() ফাংশনটি চলে।
let ও const-এর ক্ষেত্রে শুধু ঘোষণাটা উপরে উঠে — কিন্তু মান বসে ঘোষণার লাইনেই। তাই ঘোষণার আগে ব্যবহার করলে ReferenceError পড়ে। এই সাময়িক বাধাকেই বলে Temporal Dead Zone।
console.log(count); // ReferenceError
let count = 5;
console.log(age); // undefined — কোনো error নেই
var age = 5;হোস্টিং শুধু ঘোষণাকে উপরে তোলে, মানকে নয় — তাই var-এর মান উপরে undefined হয়, কিন্তু let ও const ব্যবহার করলে error পড়ে।