به طور خلاصه و مفید محیطی است که کدهای جاوااسکریپت در آن اجرا میشوند:
در این پست، به بررسی Execution Context، انواع آن و مراحل تشکیل آن میپردازیم تا با نحوه عملکرد پشت صحنه جاوااسکریپت آشنا شوید.
1 - Global Execution Context
به محض شروع اجرای یک اسکریپت جاوااسکریپت، یک GEC ایجاد میشود. این محیط شامل موارد زیر است:
window
است).Global Object
اشاره میکند).2 - Function Execution Context
هر زمان که یک تابع فراخوانی شود، یک Execution Context جدید برای آن تابع ایجاد میشود ،که شامل محیطی برای اجرای کدهای داخل تابع است.
3- Eval Execution Context
زمانی که کد با استفاده از تابع eval
اجرا شود، یک Execution Context جداگانه ایجاد میگردد.
به دو فاز اصلی تقسیم می شود: 1- مرحله ایجاد (Creation Phase) 2- مرحله اجرا (Execution Phase)
1- Creation Phase
در این مرحله جاوااسکریپت محیط لازم را برای اجرا کد تنظیم می کند. سه کار اصلی در این مرحله انجام می شود.
الف - ایجاد Activation Object
جاوااسکریپت ابتدا یک شیء به نام Activation Object ایجاد میکند که تمامی متغیرها، توابع و پارامترهای ورودی تابع را در آن ذخیره مینماید. این شیء در حافظه (شامل Call Stack و Heap و Stack) اختصاص داده میشود. با این حال، مقدار متغیرها در این مرحله undefined است.(به خاطر فرایند Hoisting)
ب - ایجاد Scope Chain
جاوااسکریپت برای دسترسی به متغیرها در سطوح مختلف، یک Scope Chain (زنجیره محدوده) ایجاد میکند. این زنجیره به موتور جاوااسکریپت کمک میکند تا متغیرها و توابع را در محدودههای بالاتر (Outer Scopes) جستجو و پیدا کند. به عبارت دیگر، اگر متغیری در محدوده فعلی یافت نشود، موتور جاوااسکریپت به صورت خودکار به محدودههای بالاتر مراجعه میکند تا آن متغیر را پیدا کند. این مکانیزم باعث میشود متغیرها و توابع تعریفشده در سطوح بیرونیتر، درون توابع داخلی نیز قابل دسترسی باشند.
ج - This binding
در این مرحله، مقدار this
مشخص میشود. مقدار this
بستگی به نحوهی فراخوانی تابع یا اجرای کد دارد و میتواند در شرایط مختلف متفاوت باشد.
2- Execution Phase
پس از اتمام موفقیتآمیز مرحله ایجاد (Creation Phase)، کد شروع به اجرا میکند. در این مرحله، اتفاقات زیر رخ میدهد:
الف - مقدار دهی متغییر ها
متغیرهایی که در مرحله ایجاد مقدار undefined
گرفته بودند، اکنون مقادیر واقعی خود را دریافت میکنند. هر زمان که به یک متغیر یا تابع دسترسی داشته باشیم، جاوااسکریپت ابتدا Scope Chain را بررسی میکند تا موقعیت آن متغیر یا تابع را پیدا کند.
ب - اجرای خط به خط کد ها
در این مرحله، کدها به ترتیب و به صورت خط به خط اجرا میشوند. هر دستور به نوبت پردازش شده و عملیات مربوط به آن انجام میشود.