Scope

در جاوااسکریپت، Scope محدوده‌ای است که متغیرها، توابع و پارامترها در آن قابل دسترسی هستند.
Scope تعیین می‌کند متغیرها کجا قابل دسترس هستند و کجا نه.

🔹 انواع Scope در جاوااسکریپت

1. Global Scope (سطح جهانی)

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

let globalVar = "I am global"; function showGlobal() { console.log(globalVar); } showGlobal(); // I am global console.log(globalVar); // I am global

2. Function Scope (محدوده تابع)

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

function myFunc() { var localVar = "I am local"; console.log(localVar); // I am local } myFunc(); console.log(localVar); // خطا: localVar is not defined

⚠️ توجه: var تابع‌محور است، نه بلوک‌محور.

3. Block Scope (محدوده بلوک)

  • متغیرهایی که با let یا const در یک بلوک {} تعریف شده‌اند، فقط داخل همان بلوک قابل دسترسی هستند.

{ let blockVar = "I am block-scoped"; const constVar = "I am also block-scoped"; console.log(blockVar); // I am block-scoped console.log(constVar); // I am also block-scoped } console.log(blockVar); // خطا: blockVar is not defined console.log(constVar); // خطا: constVar is not defined

🔹 Lexical Scope (محدوده لغوی)

  • جاوااسکریپت از Lexical Scoping استفاده می‌کند، یعنی متغیرها بر اساس محل تعریفشان در کد قابل دسترسی هستند.

function outer() { let outerVar = "outer"; function inner() { console.log(outerVar); // دسترسی به متغیر تابع بیرونی } inner(); } outer(); // outer

🔹 Scope و Closure

  • Closure زمانی ایجاد می‌شود که یک تابع به متغیرهای خارج از خود دسترسی دارد.

  • این ویژگی برای حفظ داده‌های خصوصی کاربرد دارد.

function counter() { let count = 0; return function() { count++; return count; }; } let increment = counter(); console.log(increment()); // 1 console.log(increment()); // 2

✅ خلاصه

  • Global Scope → کل برنامه

  • Function Scope → متغیرهای var داخل تابع

  • Block Scope → متغیرهای let و const داخل بلوک

  • Lexical Scope → دسترسی بر اساس محل تعریف متغیر

  • Closure → دسترسی تابع به متغیرهای بیرونی و حفظ وضعیت