اسکوپ (Scope) یا حوزه، به جاهایی گفته میشه که متغیرها قابل دسترسی و استفاده هستن.
سه نوع حوزه توی جاوا اسکریپت وجود داره:
- حوزهی سراسری (Global Scope)
- حوزهی محلی (Local Scope)
- حوزهی بلاک (Block Scope)
حوزهی سراسری
متغیرهایی که توی حوزهی سراسری تعریف میشن توی همه جای برنامه قابل دسترسی هستن. توی مثال زیر متغیر name محصور به هیچ جایی نیست و بنابراین یک متغیر سراسری هست و همه جا حتی توی توابع هم قابل دسترسیه:
// Global var name = "Michael"; function person() { console.log(name); } person(); // Michael
حوزهی محلی
متغیرهایی که توی یک تابع تعریف میشن دارای حوزهی محلی هستن و بیرون از تابع قابل دسترسی نیستن:
function person() { var name = "Michael"; } console.log(name); // ReferenceError: name is not defined
حوزهی بلاک
متغیرهایی که با let و const توی فضای بین دو براکت { ... } که به اصطلاح بلاک گفته میشه، تعریف میشن، فقط توی همون بلاک قابل دسترسی هستن:
if (true) { let name = "Michael"; console.log(name); // Michael } console.log(name); // ReferenceError: name is not defined
در واقع حوزهای که یک بلاک درست میکنه یک حوزهی محلی هست و متغیرها فقط توی همون قسمت قابل دسترسی هستن.
پیشنهاد میکنم مقالههای زیر رو بخونین:
منبع: