بلوکتابعسراسری

محدوده‌های اسکوپ در جاوااسکریپت: بلوک، تابع و سراسری

درک اسکوپ (Scope) یکی از پایه‌ای‌ترین مفاهیم در جاوااسکریپت است که تعیین می‌کند متغیرها و توابع در چه محدوده‌ای قابل دسترسی هستند. این مفهوم به سه دسته اصلی تقسیم می‌شود:

  1. اسکوپ بلوکی (Block Scope)
  2. اسکوپ تابعی (Function Scope)
  3. اسکوپ سراسری (Global Scope)

1. اسکوپ بلوکی (Block Scope)

با معرفی let و const در ES6، اسکوپ بلوکی به جاوااسکریپت اضافه شد. متغیرهای تعریف شده با این کلمات کلیدی فقط در داخل بلوک {} مربوطه قابل دسترسی هستند:

مثال توضیح
if (true) {
    let x = 10;
    console.log(x); // 10
}
console.log(x); // Error
متغیر x فقط در داخل بلوک if در دسترس است

2. اسکوپ تابعی (Function Scope)

متغیرهای تعریف شده با var دارای اسکوپ تابعی هستند، یعنی فقط در داخل تابعی که تعریف شده‌اند قابل دسترسی هستند:

  • متغیرهای var به بیرون از تابع نشت نمی‌کنند
  • این متغیرها حتی اگر در بلوک‌های داخلی تعریف شوند، در کل تابع در دسترس هستند

توجه: برخلاف let و const، متغیرهای var دارای Hoisting هستند و می‌توانند قبل از تعریف استفاده شوند (با مقدار undefined).

3. اسکوپ سراسری (Global Scope)

متغیرهایی که خارج از هر تابع یا بلوکی تعریف می‌شوند، دارای اسکوپ سراسری هستند و در تمام قسمت‌های کد قابل دسترسی می‌باشند:

let globalVar = 'من سراسری هستم';

function showVar() {
    console.log(globalVar); // قابل دسترسی
}

برای یادگیری عمیق‌تر درباره اسکوپ در جاوااسکریپت، می‌توانید به آموزش جامع وارد شوید مراجعه کنید.

نکته مهم: استفاده نادرست از متغیرهای سراسری می‌تواند باعث بروز مشکلاتی مانند تداخل نام متغیرها و کاهش خوانایی کد شود. همیشه سعی کنید محدوده متغیرها را تا حد ممکن کوچک نگه دارید.