Let (Let)
«let» راهِ امنِ ساختِ متغیر (Variable) است. یعنی فقط داخل «بلوک (Block)» خودش کار می کند. این کمک می کند اشتباهات کمتری رخ دهد؛ مثل اینکه دفتر مشقِ هر کلاس را در پوشه همان کلاس نگه داری.
محدوده بلوک (Block Scope)
متغیرِ let فقط داخل آکولادهای همان بلوک در دسترس است. بیرونِ بلوک دیده نمی شود.
{
let x = 2;
}
// اینجا دیگر x در دسترس نیست
مقایسه با var (گلوبال تر است)
var «بلوک» نمی شناسد. اگر داخل بلوک بسازی، بیرونش هم در دسترس است.
{
var x = 2;
}
// اینجا x هنوز در دسترس است
بازاعلان ممنوع در همان محدوده
با let نمی توانی همان نام را دوباره در همان بلوک بسازی. این جلوی باگ را می گیرد.
let x = "John Doe";
// let x = 0; // خطا: بازاعلان در همان بلوک مجاز نیست
بازاعلان با var مجاز است (بدعادت نشو!)
var x = 2;
// اکنون x برابر 2 است
var x = 3;
// اکنون x برابر 3 است
اثر بازاعلان روی بلوک ها
با var، اعلان داخل بلوک می تواند بیرون را هم عوض کند. با let این طور نیست.
رفتار var داخل بلوک
var x = 10;
// اینجا x برابر 10 است
{
var x = 2;
// اینجا x برابر 2 است
}
// اینجا هم x برابر 2 شد
رفتار let داخل بلوک
let x = 10;
// اینجا x برابر 10 است
{
let x = 2;
// اینجا x برابر 2 است
}
// اینجا دوباره x برابر 10 است
هوئیستینگ (Hoisting) و منطقه موقتی
var بالا کشیده می شود و قبلِ اعلان هم قابل استفاده است. let بالا کشیده می شود اما «مقداردهی» نمی شود؛ پس قبل از اعلان خطای ReferenceError می دهد.
نمونه var با هوئیستینگ
carName = "Volvo";
var carName;
نمونه let و ReferenceError
// استفاده قبل از اعلان باعث ReferenceError می شود
// carName = "Saab"; // خطا
let carName = "Volvo";
نکته: برای مرور پایه ها به متغیرها سر بزن. همچنین فصل const را بخوان. اگر دنبال «متغیر let» هستی، همین صفحه مرجع تو است.
جمع بندی سریع
- let محدوده بلوک دارد؛ var ندارد.
- بازاعلان let در همان بلوک ممنوع است.
- let قبل از اعلان قابل استفاده نیست.
- برای عموم کارها از let استفاده کن.