پرسش
اسکوپ متغیرها در جاوااسکریپت چیست؟
What is the scope of variables in JavaScript?
من میخوام بدونم که محدودهی اسکوپ متغیرها تو جاوااسکریپت چطوری تعریف میشه.
آیا محدودهی متغیرها داخل یک تابع و خارج از اون تفاوت داره ؟
1403/05/23
پاسخ
محمدامین سعیدی راد
تو جاوااسکریپت، متغیرها میتونن در چهار سطح مختلف اسکوپ داشته باشن:
- اسکوپ سراسری (Global): متغیرهایی که در سطح سراسری تعریف میشن، در سراسر برنامه قابل دسترسی هستن.
- اسکوپ تابعی (Function): متغیرهایی که با
var
داخل یک تابع تعریف میشن، فقط داخل همون تابع قابل دسترسی هستن. - اسکوپ بلوکی (Block): متغیرهایی که با
let
یاconst
تعریف میشن، فقط داخل همون بلوک (مثل بلوکهای شرطی یا حلقهها) قابل دسترسی هستن. - اسکوپ ماژولی (Module): متغیرهایی که داخل یک ماژول تعریف میشن، فقط داخل همون ماژول قابل دسترسی هستن.
به طور خلاصه، جاوااسکریپت از مدل اسکوپ لغوی (Lexical Scope) استفاده میکنه که به این معنیه که محدودهی یک متغیر از جایی که تعریف شده مشخص میشه و به سمت بیرون (به سمت اسکوپهای بالاتر) حرکت میکنه. این باعث میشه تا درک و پیشبینی اسکوپ متغیرها راحتتر بشه.
مثال
function test() { var a = 1; // Function scope if (true) { let b = 2; // Block scope const c = 3; // Block scope console.log(a); // 1 console.log(b); // 2 console.log(c); // 3 } console.log(a); // 1 console.log(typeof b); // undefined console.log(typeof c); // undefined } test(); console.log(typeof a); // undefined
تو مثال بالا ، a
داخل تابع test
تعریف شده و در خارج از اون قابل دسترسی نیست. b
و c
فقط داخل بلوکی که درونشون تعریف شده قابل دسترسی هستن.
پاسخ: 1403/05/23
آخرین آپدیت: 1403/07/07