بالابردن (Hoisting)
«بالابردن (Hoisting)» یعنی جاوااسکریپت اعلام ها را به بالای دامنه می برد. پس کد، انگار اول اعلام شده است. اما مقداردهی جابه جا نمی شود.
اعلام ها بالا می روند
با var می توانی قبلِ اعلام، از متغیر استفاده کنی. چون فقط «اعلام (Declaration)» بالا می رود.
x = 5;
const elem = document.getElementById("demo");
elem.innerHTML = x;
var x;
این دو کد نتیجه یکسان دارند؛ چون اعلام var x؛ بالا رفته است.
var x;
x = 5;
const elem = document.getElementById("demo");
elem.innerHTML = x;
let و const و ناحیه مرده زمانی
با «let» و «const»، اعلام بالا می رود؛ ولی «مقداردهی» نه. آن ها تا اعلام نشوند، قابل استفاده نیستند. این بازه «ناحیه مرده زمانی (TDZ)» است.
carName = "Volvo";
let carName;
استفاده قبلِ اعلام با const، خطای نحوی می دهد. کد اصلاً اجرا نمی شود.
carName = "Volvo";
const carName;
بالابردن مقداردهی انجام نمی شود
فقط «اعلام» بالا می رود؛ نه «مقداردهی (Initialization)». پس y قبلِ مقداردهی، undefined است.
var x = 5;
const elem = document.getElementById("demo");
elem.innerHTML = x + " " + y;
var y = 7;
این معادلِ نوشتنِ اعلام y در بالا است؛ اما مقداردهی پایین می ماند.
var x = 5;
var y;
const elem = document.getElementById("demo");
elem.innerHTML = x + " " + y;
y = 7;
بهترین عادت ها
همیشه متغیرها را ابتدای دامنه اعلام کن. با این کار، رفتار کد واضح می شود و باگ ها کمتر می شوند.
گام های عملی
- یک نمونه با var بساز و قبلِ اعلام استفاده کن.
- همان نمونه را با let تکرار کن و خطا ببین.
- اعلام ها را به بالا ببر و تفاوت را بررسی کن.
جمع بندی سریع
- Hoisting فقط اعلام را جابه جا می کند.
- var قبلِ اعلام قابل استفاده است.
- let/const قبلِ اعلام خطا می دهند.
- مقداردهی هرگز بالا نمی رود.
برای درک بهتر، صفحه دامنه (Scope) را ببین. سپس به حالت سخت گیرانه (Strict Mode) برو تا خطاها کمتر شوند.
نکته: بخش Hoisting در W3Schools جزئیات بیشتری دارد.