✍️ وقتی داخل یک بلوک، نامی را دوباره با let یا const تعریف میکنی، یک متغیر مستقل ساخته میشه. این کار shadowing یا پوشاندن نام بیرونی است. مقدار بیرونی پاک نمیشه؛ فقط تا وقتی توی آن بلوک هستیم، نام یکسان به متغیر نزدیکتر اشاره میکنه. بعد از خروج، دوباره نام بیرونی دیده میشه.
مثلاً یک فروشگاه میتونه عنوان عمومی «فروشگاه» داشته باشه و داخل بخش پیشنهاد ویژه، عنوان محلی «حراج» تعریف کنه. تغییر عنوان محلی قرار نیست عنوان کل صفحه را تغییر بده. برای پیشبینی کد پایین، اول برای هر تعریف یک جای جدا روی کاغذ در نظر بگیر؛ بعد هر دستور چاپ را به نزدیکترین تعریف وصل کن.
خطای رایج اینه که let score = 9 را همان انتساب score = 9 حساب کنیم. اولی متغیر تازه میسازه، دومی متغیر موجود را تغییر میده. از بالا به پایین اجرا کن و فقط دو خروجی چاپشده را در نظر بگیر؛ آکولاد خودش چیزی چاپ نمیکنه.
let score = 4;
{
let score = 9;
score += 1;
console.log(score);
}
console.log(score);
فعالیت شما
دو خط خروجی کد را به ترتیب انتخاب کن.