سلام سلام
رسیدم به مبحث جذاب scoping توی زبان شیرین javascript 😎
اگه مقاله قبل رو خونده باشید گفتم Execution Context سه تا مورد داره که یکی از اون سه مورد یعنی scope مبحث اصلی این قسمت هستش
اسکوپ یعنی اون محدوده ای که variable های ما توی اون تعریف شدن و خارج از اون محدوده قابل دسترسی نیستن.
پس وقتی پرسیدن اسکوپ یا محدوده یک متغییر کجاست ؟؟؟ 🤨 باید بگیم محدوده ای از کد ما که اون متغییر بهش دسترسی داره . اوکی؟
حالا ما 3️⃣ نوع اسکوپ داریم :
1️⃣ اولیش میشه Global Scope :
2️⃣ دومین اسکوپ ما Function Scope (Local Scope هم بهش میگن) :
3️⃣ آخرین اسکوپ ما Block Scope هستش که توی ES6 معرفی شد :
پس یکی از تفاوت های var با let , const رو زیر پوستی یاد گرفتین، که اون تفاوتم میشه ؟ اسکوپشون
تفاوت های دیگشون رو قسمت های بعدی میگم، آسیاب به نوبت
نکته بعدی مکانیزمی به اسم scope chain هست یعنی زنجیره اسکوپی، حالا این زنجیره اسکوپی میخواد چی رو برسونه ؟؟؟ بریم با مثال یادش بگیریم
تصویر بالارو ببینید فرض کنید میخواییم به اون myName دسترسی پیدا کنیم خب سوال اینجاست که myName که توی اسکوپ تابع second تعریف نشده که پس باید ارور بده دیگه
اما نه ✋🏻!!! چون جاوااسکریپت باهوشه، اول توی همون اسکوپ که متغییر myName صدا زده شده جست و جو میکنه میبینه ای دل غافل چیزی نیست که، میره اسکوپ بالاترش یعنی تابع first رو میگرده میبینه ای بابا اینجام نیستش پس بازم میره بالاتر (یعنی اسکوپ گلوبال) میبینه خط اول تعریف شده پس مقدار myName رو میزاره jonas پس به کل این فرایند جست و از داخل به بیرون برای دسترسی به یک متغییر رو میگن scope chain
درواقع انقدر به اسکوپ بالاتر میره تا به تهش برسه پیداش کنه، در این بچه پیگیریه
چندتا نکته حواست باشه :
☝🏻فرایند جست و جو از داخل به بیرونه مثل یه خیابون یک طرفه اس و برعکسش صدق نمیکنه
☝🏻جست و جو نسبت به بلاک بالاتر صورت میگیره نه بلاک همسایه یعنی جاوااسکریپت نمیاد برای myName اون بلاک if رو بگرده بلکه بلاک بالاترش که first هست رو میگرده اون باکس بنفش و زرد هم داره این موضوع رو نشون میده
☝🏻 دقت کنید برای جست و جو یک اسکوپ جاوااسکریپت به ترتیب محل تعریف اسکوپ ها و بلاک ها نگاه میکنه، کاری نداره که تابع به ترتیب صدا زده شده باشه (برعکس Execution Context مقاله قبل که با صدا زدن تابع کار میکرد)
☝🏻 توی scope chain تمام اسکوپ ها به متغییر های بیرونی خودشون دسترسی دارن
امیدوارم به دردتون خورده باشه توی قسمت بعد میریم اون بالا بالا ها تا Hoisting رو یاد بگیریم و طرز کارشو بفهمیم
هرجا متوجه نشدین یا من اشتباه گفته بودم کامنت بزارید
موفق باشید ❤️