بزار ببینم ساعت چنده !؟
اوپس ، ساعت 4 صبحه
مدتی هست که دارم یکم روی مباحث جاوااسکریپت عمیق تر میشم،با موارد و Tip های جالبی آشنا شدم
یکی از مباحث ساختاری که به نظرم هر برنامه نویس جاوااسکریپت باید بدونه(و معتقدم خودم قبل از فهمیدنش تباه بودم) این آقای Call Stack هست
تا حالا به این فکر کردید تابع هایی که مینویسیم چطور اجرا میشن !؟ ، مرورگر یا موتور اجرا کننده چطوری بهش نگاه می کنند و بعد اجرا میکنند !؟
یکی از ویژگی های جاوااسکریپت اینه که در یک لحظه فقط میتونه یک کار رو انجام بده،پس باید یه ترتیبی برای انجام دادن دونه به دونه کار هاش داشته باشه
ممکنه خیلی ها این نوع تعریف من رو قبول نداشته باشن،اما بیاید سختش نکنیم،همه چیز به وقتش
قرار نیست تو عمق هم عمیق بشیم(جواد خیابانی)
call Stack تو تعریف خیلی ساده یه لیستی هست که موتور های جاوااسکریپت برای خودشون دارن که مربوط به ترتیب اجرا شدن توابع ما میشه
بزار یکم بیشتر توضیح بدم،این کد رو نگاه کن
function one() { console.log("one"); }; function two() { one(); console.log("two"); }; two();
بیاید ببینیم ارتباط این کدمون با Call Stack چه شکلی هستش . . .
همونطور که معلومه توی کدمون دوتا تابع داریم => "one" & "two"
بعد از تعریف این تابع ها ما اومدیم تابع دوم رو صدا زدیم، پس با توجه به صدا کردن این تابع،باید بیاد و بره تو استکمون
حالا Call Stack ما این شکلی میشه
خب،بعد از صدا زدن تابع two اومد تو لیست call Stack ما قرار گرفت،پس برنامه باید بره سراغ این تابع تا اجراش کنه
ما توی تابع two تابع one رو صدا زدیم،پس باز هم اینجا تابع one باید بیاد تو لیست زیبامون :)
حالا یه همچین لیستی از توابعی که باید اجرا بشن داریم . . .
خیلی ساده،الان توابع ما اجرا میشن
تابع one بعد از تمام کارش(چاپ کردن مقدار "one") از Call Stack خارج میشه
حالا نوبت به تابع two میرسه . . .
که اونم با چاپ کردن مقدار "two" از stack خارج میشه
پس حالا stack ما خالیه :)
اگر درباره call stack خونده باشید یا شنیده باشید،حتما چیزی به نام eventLoop رو هم شنیدید یا خوندید
حالا اینکه اون دیگه چیه و کجای داستان قرار میگیره رو تو پست بعدی براتون مینویسم
ممنونم از اینکه تا اینجا رو بودی