💎 موتور جاوااسکریپت (engine) 💎
امروز میخوایم بریم سراغ دو تا از مهمترین مفاهیم در متور جاوا اسکریپت: Call Stack و Memory Heap. که کدای ما توی این دوتا بخش اجرا میشه.
🤔 حالا Call Stack چیه؟
تصور کنید چندتا بشقاب روی هم داریم. هر وقت یه تابع جدید صدا میزنیم، یه بشقاب جدید روی بشقابای قبلی میذاریم. وقتی کار تابع تموم شد، بشقاب رو برمیداریم. این روند همون Call Stack ماست.
❓ چرا این مهمه؟
چون جاوا اسکریپت تک رشته ای هست (single thread) هست، یعنی هر بار فقط یه کار رو انجام میده. Call Stack به جاوا اسکریپت کمک میکنه بفهمه کدوم تابع باید بعد از تابع قبلی اجرا بشه.
🧐 حالا Execution Context درون call stack چیه؟
هر بار که یه تابع اجرا میشه، یه Execution Context جدید ایجاد میشه که به call stack اضافه میشه. این Context شامل دو بخش اصلی هست:
تصور کن یه درخت خانوادگی داریم. هر متغیری یه فرزند از نسل قبلی هست. Scope Chain به ما کمک میکنه تا از پایین به بالا در این درخت جستجو کنیم و مقدار متغیرها رو پیدا کنیم.
❓ حالا کلمه کلیدی This چیه؟
این کلمه کلیدی به شیء جاری اشاره میکنه. اما مقدار دقیقش به نحوه فراخوانی تابع بستگی داره. مثلا وقتی یه تابع به عنوان متد یک شیء فراخوانی میشه، this به اون شیء اشاره میکنه.
❓ حالا Memory Heap چیه؟
حالا بیایم سراغ Memory Heap. این قسمت مثل یه انبار بزرگه که همه دادههای برنامه توش ذخیره میشه. اشیاء، آرایهها و توابع همه در Heap قرار میگیرن.
❓ تفاوت Call Stack و Memory Heap چیه؟
فهمیدیم Call Stack و Memory Heap دو مفهوم اساسی در جاوا اسکریپت هستن که درک عمیقشون برای نوشتن کدهای کارآمد و عیبیابی بسیار مهمه.
@ninja_learn_ir
امروز میخوایم بریم سراغ دو تا از مهمترین مفاهیم در متور جاوا اسکریپت: Call Stack و Memory Heap. که کدای ما توی این دوتا بخش اجرا میشه.
🤔 حالا Call Stack چیه؟
تصور کنید چندتا بشقاب روی هم داریم. هر وقت یه تابع جدید صدا میزنیم، یه بشقاب جدید روی بشقابای قبلی میذاریم. وقتی کار تابع تموم شد، بشقاب رو برمیداریم. این روند همون Call Stack ماست.
❓ چرا این مهمه؟
چون جاوا اسکریپت تک رشته ای هست (single thread) هست، یعنی هر بار فقط یه کار رو انجام میده. Call Stack به جاوا اسکریپت کمک میکنه بفهمه کدوم تابع باید بعد از تابع قبلی اجرا بشه.
🧐 حالا Execution Context درون call stack چیه؟
هر بار که یه تابع اجرا میشه، یه Execution Context جدید ایجاد میشه که به call stack اضافه میشه. این Context شامل دو بخش اصلی هست:
🗂Variable Environment:
جایی که متغیرهای محیطی تابع ها ذخیره میشن.
🌳Scope Chain:حالا Scope Chain چیه؟ ⛓️
زنجیرهای از اشیاء است که برای پیدا کردن مقدار متغیرها استفاده میشه.
تصور کن یه درخت خانوادگی داریم. هر متغیری یه فرزند از نسل قبلی هست. Scope Chain به ما کمک میکنه تا از پایین به بالا در این درخت جستجو کنیم و مقدار متغیرها رو پیدا کنیم.
❓ حالا کلمه کلیدی This چیه؟
این کلمه کلیدی به شیء جاری اشاره میکنه. اما مقدار دقیقش به نحوه فراخوانی تابع بستگی داره. مثلا وقتی یه تابع به عنوان متد یک شیء فراخوانی میشه، this به اون شیء اشاره میکنه.
❓ حالا Memory Heap چیه؟
حالا بیایم سراغ Memory Heap. این قسمت مثل یه انبار بزرگه که همه دادههای برنامه توش ذخیره میشه. اشیاء، آرایهها و توابع همه در Heap قرار میگیرن.
❓ تفاوت Call Stack و Memory Heap چیه؟
Call Stack:
برای اجرای کد استفاده میشه و بر اساس
اصل LIFO (Last In, First Out) کار میکنه.
Memory Heap:✅ جمعبندی
برای ذخیره دادهها استفاده میشه و حافظه به صورت پویا تخصیص داده میشه.
فهمیدیم Call Stack و Memory Heap دو مفهوم اساسی در جاوا اسکریپت هستن که درک عمیقشون برای نوشتن کدهای کارآمد و عیبیابی بسیار مهمه.
#جاوااسکریپت #callstack #memoryheap #executioncontext #scope #this
👍15❤2