چگونه توابع (functions) در جاوا اسکریپت کار می کنند؟؟

تا حالا به این فکر کردید وقتی یه متغیر رو صدا می زنید چه اتفاقاتی میفته تا اجرا بشه ؟

همه فانکشن ها یه نوع متغیر حساب میشن.

وقتی که برنامه اجرا میشه ، از اونجایی که جاوا اسکریپت asynchronous کار می کنه (در یه مقاله دیگه توضیح میدم)

به همین دلیل اول از همه تمام متغیر ها رو به صورت undefined دکلار می کنه و همینطور اسم متغیر ها رو داخل global execution context ذخیره می کنه به همراه اون خطی که متغیر اونجا دکلار شده.

function double(a) {
let myvar = a * 2;
return myvar;
}
let b = doube(2);
alert(b);


طبق مثال بالا برنامه اجرا میشه و توی خط اول یه متغیر به نام double داخل exection context ایجاد میشه که مقدارش undefined ئه و بعد برنامه تشخیص میده که این متغیر یک تابعه، پس تمام مقادیر داخل {} به این متغیر اختصاص می گیره ولی نه اجرا میشه نه خونده میشه فقط و فقط داخل exection context ذخیره میشه.

برنامه اجرا میشه و جلو تر یه متغیر به نام b میرسه و دوباره با مقدار undefined ذخیره می کنه و وقتی جلو تر میره ، عملگر = رو می بینه که مقدار (double(2 رو به b نسبت داده و مقدار b در execution context تغییر می کنه

خب برنامه وقتی که () می بینه متوجه میشه که این یه تابعه و داخل global exection context دنبال اسم double میگرده و اون رو پیدا می کنه و خطی که اون فانکشن اونجا قرار داره رو می گیره (خط یک برنامه) اجرای برنامه به خط یک میره و اونجا 2 به عنوان یک argument وارد فانکشن میشه.

خب الان execution context عوض شد

چون ما از گلوبال اسکوپ به لوکال اسکوپ رفتیم (پست مربوط به اسکوپ ها رو بخونید) و این بار متغیر ها در local execution context ذخیره میشن.

متغیر myvar مثل بقیه متغیر ها ذخیره میشه.

و برنامه به return میرسه ، وقتی return انجام میشه local execution context از بین میره (با متغیر هایی که داخلش ساخته شده)

و اجرای برنامه دوباره به جایی که این فانکشن رو صدا زدیم بر می گرده و مقدار خارج شده از return به b تعلق می گیره.

در نهایت (alert(b اجرا میشه.

-انتشارات توسعه دهندگان وب-