اسکوپ (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

در واقع حوزه‌ای که یک بلاک درست می‌کنه یک حوزه‌ی محلی هست و متغیرها فقط توی همون قسمت قابل دسترسی هستن.

پیشنهاد می‌کنم مقاله‌های زیر رو بخونین:

 

منبع: