জাভাস্ক্রিপ্টে Hoisting হল এমন একটি মেকানিজম, যেখানে ভেরিয়েবল এবং ফাংশন ডিক্লারেশন স্বয়ংক্রিয়ভাবে স্ক্রিপ্টের টপে (উপরের দিকে) নিয়ে যাওয়া হয়। এটি জাভাস্ক্রিপ্ট ইঞ্জিনের কাজ করার একটি স্বাভাবিক পদ্ধতি, যা অনেক ডেভেলপারকে বিভ্রান্ত করতে পারে যদি তারা এটি সম্পর্কে পরিষ্কার ধারণা না রাখেন।
ভেরিয়েবল Hoisting
জাভাস্ক্রিপ্টে যখন কোনো ভেরিয়েবল var কিওয়ার্ড দিয়ে ডিক্লেয়ার করা হয়, তখন সেটি স্কোপের শীর্ষে নিয়ে যাওয়া হয়, তবে মান (value) hoist হয় না।
উদাহরণ:
console.log(name); // Output: undefined
var name = "Rahim";
console.log(name); // Output: Rahim
এখানে প্রথম console.log(name);
লাইনটি undefined
রিটার্ন করে, কারণ var name;
ডিক্লারেশনটি উপরে চলে গেছে, কিন্তু এর মান Rahim সেট করার আগে এক্সিকিউট হচ্ছে না।
let এবং const এর ক্ষেত্রে Hoisting
যখন let এবং const ব্যবহার করা হয়, তখনও Hoisting ঘটে, কিন্তু এগুলো Temporal Dead Zone (TDZ)-এ থাকে যতক্ষণ না তাদের মান এসাইন করা হয়। ফলে, ReferenceError দেখা যায়।
console.log(age); // ReferenceError
let age = 25;
console.log(age);
ফাংশন Hoisting
জাভাস্ক্রিপ্টে function declaration সম্পূর্ণভাবে স্কোপের শীর্ষে নিয়ে যাওয়া হয়, তাই আপনি ফাংশন কল করার আগেও এটি ব্যবহার করতে পারেন।
উদাহরণ:
greet(); // Output: Hello, World!
function greet() {
console.log("Hello, World!");
}
এখানে greet()
কল করার আগেই ফাংশনটি পাওয়া যাচ্ছে, কারণ এটি সম্পূর্ণভাবে Hoist হয়।
Function Expression Hoisting
যদি ফাংশনকে expression আকারে ডিক্লেয়ার করা হয়, তবে এটি Hoist হয় না।
sayHello(); // TypeError: sayHello is not a function
var sayHello = function() {
console.log("Hello!");
};
এখানে শুধুমাত্র var sayHello; উপরে চলে গেছে, কিন্তু ফাংশনটি undefined হিসেবে রয়ে গেছে যতক্ষণ না সেটির মান এসাইন করা হয়।
কেন Hoisting গুরুত্বপূর্ণ?
- কোড লেখার সময় অপ্রত্যাশিত আচরণ এড়াতে সাহায্য করে।
- ভেরিয়েবল ও ফাংশন ব্যবহারের সঠিক পদ্ধতি শেখায়।
let
ওconst
ব্যবহার করে Temporal Dead Zone (TDZ) এড়ানো যায়।
উপসংহার
Hoisting হল জাভাস্ক্রিপ্টের একটি গুরুত্বপূর্ণ কনসেপ্ট, যা বোঝার মাধ্যমে আমরা আমাদের কোড আরও পরিষ্কার ও কার্যকরীভাবে লিখতে পারি। সর্বদা let
এবং const
ব্যবহার করার চেষ্টা করুন যাতে অনাকাঙ্ক্ষিত ভুল এড়ানো যায়। এছাড়াও, function expressions এবং arrow functions ব্যবহারের সময় সতর্ক থাকুন, কারণ এগুলো সরাসরি Hoist হয় না।