سلام..
اسکوپ ها یکی از مباحث fundamental جاوا اسکریپت هستش که هر توسعه دهنده جاوااسکریپت باید یه دانشی ازش داشته باشه!
ما کلا توی زبان های برنامه نویسی دو نوع اسکوپ داریم :
1- Lexical scope
2- Dynamic scope
که جاوااسکریپت از مورد اول یعنی lexical scope برخورداره که قراره توی این مقاله راجب اون بحث کنیم.
خب lexical scope یعنی چی ؟!
یعنی اینکه ما بتونیم قبل از اجرا کردن کد، محدوده ای که identifier(متغیر،فانکشن ...) قابل دسترسی هستن رو تشخیص بدیم، همین :)
توی جاوااسکریپت سه نوع اسکوپ داریم که یجورایی می شه گفت سه قانون مختلف از lexical scope هستش .
3 نوع اسکوپ در جاوااسکریپت :
1- Global Scope
2- Function/Local Scope
3- Block Scope
خب بریم سراغ تعریفشون :)
بالایی ترین لایه یا محدوده ای که توش کد می زنید همین گلوبال اسکوپه :)
اولین کد هاتون رو ازاین محدوده شروع می کنید و می نویسید و خب همونطور که می دونید هر Identifierی که توی این محدوده تعریف بشه در کل محدوده برنامه قابل دسترسیه .
همونطور که از اسمش پیداس به محدوده درونی فانکشن ها اشاره می کنه :)
قانون این اسکوپ این هستش که متغیر های تعریف شده درون فانکشن، بیرون از فانکشن قابل دسترسی نیستن حتی اگه متغیر با var تعریف شده باشه! اما برعکس می تونیم ازمتغیر تعریف شده داخل این اسکوپ در اسکوپ های فرزند استفاده کنیم :).
این اسکوپ هم به محدوده های if,else,switch,for,try و.. اشاره می کنه .
فرقش با فانکشن اسکوپ اینه که اگه درون این اسکوپ متغیری با var تعریف بشه بیرون از این اسکوپ قابل دسترسیه .
خب تا اینجای کار با مفهوم lexical scope و انواعی که داره، آشنا شدیم!
توی مقاله بعدی عمیق تر بررسی می کنیم که این قوانین به چه شکلی توی کامپایل شدن کار می کنن و با اصطلاحات جدید تری اشنا می شیم :)