مفهوم call stack در جاوا اسکریپت به صورت خلاصه و مفید

با عرض سلام و احترام خدمت دوستان کد ایتی عزیز.در ادامه سری آموزش مقدماتی جاوا اسکریپت تا پیشرفته این جلسه ما در رابطه با  call stack در جاوا اسکریپت بحث خواهیم کرد. با ما همراه باشید.

کال استک راهی برای موتور جاوا اسکریپت است تا مکان خود را در کدی که چندین تابع را فراخوانی می کند، پیگیری کند. اطلاعاتی در مورد اینکه چه تابعی در حال حاضر اجرا می شود و چه توابعی از داخل آن تابع فراخوانی می شود، دارد…

همچنین، موتور جاوا اسکریپت از  call stack برای مدیریت execution contexts استفاده می کند:

  • The global execution context
  • Function execution contexts

call stack بر اساس اصل  LIFO کار می کند.

هنگامی که یک اسکریپت را اجرا می کنید، موتور جاوا اسکریپت یک زمینه اجرای سراسری ایجاد می کند و آن را در بالای call stack قرار می دهد.

هر زمان که یک تابع فراخوانی می شود، موتور جاوا اسکریپت یک زمینه اجرای تابع برای تابع ایجاد می کند، آن را در بالای پشته فراخوانی پوش می دهد و اجرای تابع را شروع می کند.

اگر تابعی تابع دیگری را فراخوانی کند، موتور جاوا اسکریپت زمینه اجرای تابع جدیدی را برای تابع فراخوانی شده ایجاد کرده و آن را در بالای کال استک قرار می دهد.

هنگامی که عملکرد فعلی کامل شد، موتور جاوا اسکریپت آن را از پشته فراخوانی خارج می کند و از همان جایی که متوقف شده است، اجرا را از سر می گیرد.

 

مطالب مرتبط : break و continue در جاوا اسکریپت

هنگامی که پشته خالی شود، اسکریپت متوقف می شود.

مثال برای call stack در جاوا اسکریپت

بیایید با مثال زیر شروع کنیم:


هنگامی که موتور جاوا اسکریپت این اسکریپت را اجرا می کند، زمینه اجرای سراسری که با تابع ()main() یاglobalمشخص می شود را در کال استک قرار می دهد.

JavaScript Call Stack - main

زمینه اجرای سراسری وارد مرحله ایجاد می شود و به مرحله اجرا می رود.

موتور جاوا اسکریپت فراخوانی تابع average(10, 20) را اجرا می کند و یک زمینه اجرای تابع برای تابع ()average ایجاد می کند و آن را در بالای پشته فراخوانی قرار می دهد.
JavaScript Call Stack - step 2
موتور جاوا اسکریپت شروع به اجرای  ()average می کند زیرا تابع  ()average در بالای کال استک قرار دارد.
تابع ()average تابع  ()add را فرا می خواند. در این مرحله، موتور جاوا اسکریپت زمینه اجرای تابع دیگری را برای تابع ()add  ایجاد می کند و آن را در بالای call stack قرار می دهد:
JavaScript Call Stack - step 3

موتور جاوا اسکریپت تابع  ()add را اجرا می کند و آن را از کال استک خارج می کند:

JavaScript Call Stack - step 4

در این مرحله، تابع()average در بالای پشته فراخوانی قرار دارد، موتور جاوا اسکریپت آن را اجرا کرده و از پشته خارج می کند.

JavaScript Call Stack - step 5

اکنون کال استک خالی است، بنابراین اجرای اسکریپت متوقف می شود:

JavaScript Call Stack - empty stack

تصویر زیر وضعیت کلی Call Stack را در تمام مراحل نشان می دهد:

JavaScript Call Stack

وضعیت call stack در جاوا اسکریپت – کدایت

Stack Overflow (سرریز پشته)

پشته فراخوانی بسته به اجرای محیط میزبان، چه مرورگر وب یا Node.js، اندازه ثابتی دارد.

اگر تعداد زمینه های اجرا از اندازه پشته بیشتر شود، یک خطای سرریز پشته رخ می دهد.

به عنوان مثال، هنگامی که یک تابع بازگشتی را اجرا می کنید که شرایط خروج ندارد، موتور جاوا اسکریپت یک خطای سرریز پشته را صادر می کند:

Asynchronous JavaScript (جاوا اسکریپت ناهمگام)

جاوا اسکریپت یک زبان برنامه نویسی single-threaded است. این بدان معناست که موتور جاوا اسکریپت تنها یک کال استک  دارد. بنابراین، تنها می تواند یک کار را در یک زمان انجام دهد.

هنگام اجرای یک اسکریپت، موتور جاوا اسکریپت کد را از بالا به پایین، خط به خط اجرا می کند. به عبارت دیگر همزمان است.

ناهمزمان به این معنی است که موتور جاوا اسکریپت می تواند وظایف دیگری را در حالی که منتظر تکمیل کار دیگری است اجرا کند. به عنوان مثال، موتور جاوا اسکریپت می تواند:

  • درخواست داده از یک سرور راه دور
  • نمایش اسپینر
  • هنگامی که داده ها در دسترس هستند، آن را در صفحه وب نمایش دهد.

برای این کار موتور جاوا اسکریپت از یک حلقه رویداد استفاده می کند که در اینده به آموزش آن میپردازیم.

خلاصه
  • موتور جاوا اسکریپت از پشته فراخوانی برای مدیریت زمینه های اجرا استفاده می کند.
  • کال استک از ساختار داده پشته استفاده می کند که بر اساس اصل LIFO (آخرین در اولین خروج) کار می کند.

خب دوستان عزیز به پایان جلسه call stack در جاوا اسکریپت رسیدیم امیدواریم این مقاله مورد توجه شما قرار گرفته باشد.

سایر مقالات: Heap memory چیست؟

 

برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]
اشتراک‌گذاری

علی فرجی هستم، برنامه نویس جاوا اسکریپت و ریکت با بیش از 5 سال تجربه. من عاشق برنامه نویسیم و همیشه به دنبال یادگیری چیزهای جدید هستم.همچنین یکی از بنیانگذار های سایت کدایت ، یک سایت آموزش برنامه نویسی در حوزه جاوا اسکریپت، ریکت، اندروید و ... هستم. امیدوارم بتوانم با دانش و تجربه خود به سایر برنامه نویسان کمک کنم تا در این زمینه پیشرفت کنند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *