توی جاوااسکریپت، هر جفت آکولاد میتونه یک محدوده برای متغیرهای let و const بسازه. به این محدوده میگیم block scope یا دامنه بلوکی. متغیری که داخل شرط تعریف میکنی، فقط همانجا و در بلوکهای داخلیتر قابل استفاده است. این ویژگی کمک میکنه اسمهای موقت وارد بقیه برنامه نشن و یک محاسبه کوچک، نتیجه جای دیگری را عوض نکنه.
مثال پایین مبلغ خرید را بیرون شرط نگه میداره، ولی مقدار تخفیف فقط موقع محاسبه لازم است. بعد از تمام شدن شرط، amount هنوز در دسترس است؛ discount نیست. اگر لازم داری نتیجهای بعد از شرط استفاده بشه، نتیجه را بیرون تعریف کن و داخل شرط مقدارش را تغییر بده. خطای رایج اینه که متغیر نتیجه را داخل شرط بسازی و بعد بیرون از آن بخوانی؛ حتی اگر شرط اجرا شده باشه، دامنه متغیر عوض نمیشه.
✍️ موقع خواندن کد، برای هر نام از نزدیکترین آکولاد شروع کن و به سمت بیرون برو. تعریف نزدیکتر تعیین میکنه آن نام به کدام متغیر اشاره دارد.
let amount = 200;
if (amount >= 100) {
const discount = 20;
amount = amount - discount;
}
console.log(amount); // 180
// console.log(discount); // ReferenceError
فعالیت شما
مثال را دنبال کن؛ فرق دسترسی به amount و discount بیرون بلوک را توضیح بده.