توی قسمت قبل فهمیدیم که موتور جاوااسکریپت چیه و پس قضیه چطور کار میکنه ، این قسمت می خواییم بیشتر وارد جزئیات call stack بشیم
همون طور که قسمت قبل گفتم توی call stack مفهومی به اسم EC (Execution Context) داریم
این EC چی هست ؟ 🤔 محیطی که کد های جاوااسکریپت توش اجرا میشن یا محل ذخیره اطلاعاتی که کد ما برای اجرا بهش نیاز داره
یه پیتزا کامل رو در نظر بگیرید ، هر تیکه 🍕 از این پیتزا میشه کد جاوااسکریپتی ما و کل پیتزا میشه اون EC
حالا این EC چه موقع ساخته میشه :
اولیش Global EC هست که توی هیچ تابعی نیست و در بالاترین سطح کد (top-level) یعنی جایی خارج از توابع ما ساخته میشه و فقط یک دونه ازش داریم
دومین EC ما به ازای هر تابع که صدا زده میشه ساخته میشه ، دقت کنید دارم میگم صدا زده میشه نه اینکه تعریف میشه اون جایی که تعریف کردن تابع مهم میشه برامون میشه scope که توی مقاله بعدی میرم سر وقتش
هر EC یه سری اطلاعات توش هست :
1. Variable environments (let, const, var, function, …)
2. Scope
3. This keyword
هیچی عین مثال نیست پس کد زیر رو داشته باش:
· همیشه اول Global EC ساخته میشه و وارد call stack میشه ، همون طور که توی تصویر میبینید جاوااسکریپت اول به name رسیده و خب مقدارش رو قرار داده حالا به first و second رسیده و مقدارشون یه تابع است که هنوز اجرا نشدن و وقتی که به مقدار x می رسه چون تابع first هنوز اجرا نشده مقدارش نامعلومه
· حالا میبینه که first اول از همه صدا زده شده (کاری با محل تعریفش نداریم، صدا زدن مهمه برامون) پس میاد یه EC براش میسازه و میاد رو Global EX قرار میگیره (اون جریان پشته رو که از قسمت اول یادتونه؟😉)
· وارد تابع first میشه ، مقدار a رو قرار میده اما مقدار b باز نامعلومه، میبینه که second صدا زده شده پس تابع first رو رها میکنه و میره برای second یه EC میسازه
· توی second مقدار c که مشخصه حالا میرسه به return و به محض رسیدن به return تابع second از call stack پر میکشه میره بیرون، الان فقط یه first و Global EC داریم
· حالا ادامه تابع first رو میره حالا دیگه مقدار b نامعلوم نیست چون از second مقدارشو گرفته و a+b میکنه و در اخر return میشه و first هم عین second از call stack پر میکشه میره
· الان یه Global EC تک و تنها مونده و مقدار x هم مشخص شده پس Global EC هم میبینه دیگه کاری نداره پر میکشه میره و قصه ما به سر رسید😒
امیدوارم به دردتون خورده باشه
اگه جایی اشتباه کردم یا مفهوم رو نرسوندم تو نظرات بهم بگید ممنون