backend developer | telegram : @ali256reza
چگونه توابع (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 اجرا میشه.
مطلبی دیگر از این انتشارات
امنیت (node.js (Injections
مطلبی دیگر از این انتشارات
پرامیس ها در جاوااسکریپت | Promises in JavaScript
مطلبی دیگر از این انتشارات
کلوژر کلوژر که میگن چیه؟؟؟