📌 مرجع سريع: نموذج التنفيذ في JavaScript

وحدة معرفة مضغوطة — بتتحدث مع كل درس في المرحلة 0. آخر تحديث: درس 0011 (Currying).

المصطلحات (Glossary)

المصطلحالتعريف في سطر
Execution Contextبيئة تنفيذ بتتعمل لكل استدعاء function (+ واحدة Global) — فيها المتغيرات والـ scope وقيمة this
Call Stackالـ contexts النشطة مترصّين فوق بعض — LIFO (Last In, First Out: آخر داخل أول خارج): اللي فوق هو اللي شغال دلوقتي
Creation Phaseقبل التنفيذ: حجز المتغيرات والدوال في الذاكرة (أصل الـ hoisting)
Execution Phaseتنفيذ الكود سطر سطر وإسناد القيم
Stack Frameالعنصر الواحد جوه الـ stack (بيمثل execution context واحد)
Stack OverflowRangeError: Maximum call stack size exceeded — تراكم frames من غير خروج (غالباً recursion بلا توقف)

القواعد الذهبية

  1. الـ context بيتعمل عند الاستدعاء — مش عند التعريف.
  2. كل context بيمر بمرحلتين: إنشاء ثم تنفيذ.
  3. function خلصت (return أو آخر سطر) = context خرج من الـ stack فوراً.
  4. JS بمحرك واحد synchronous: context واحد بس بيتنفذ في أي لحظة (اللي فوق). — الـ async بييجي في الأسبوع 6 إن شاء الله.

التتبع بالإيد (Hand Tracing) — أنت المحاكي

نفس محاكي درس 0001 بس بورقة وقلم: بتقرا الكود سطر سطر وبتكتب كل حدث (دالة دخلت/خرجت) وشكل الـ stack بعده. بتستخدمها لما تقابل كود مش فاهمه — في انترفيو أو debugging — ومفيش محاكي جاهز:

الحدث (بترتيب الحصول)الـ stack بعده
greet("عمر") اتنادت ← pushGlobal → greet
جواها: build("عمر") اتنادت ← pushGlobal → greet → build
build عملت return ← popGlobal → greet
console.log(msg) ← push ثم pop بسرعةGlobal → greet
greet خلصت ← popGlobal

القاعدة: كل نداء اكتبه بإزاحة لجوه (عمق أكتر في الـ Call Stack)، وكل return ارجع بره. لما حد يقولك "اشرح الكود ده" — ده أول قلم تحطه على الورق.

Hoisting والـ TDZ (من درس 0002)

varlet / constfunction declaration
قيمتها في مرحلة الإنشاءundefined⏳ من غير قيمة (TDZ)الدالة كاملة ✓
الوصول قبل سطرهاundefined (صامت)💥 ReferenceErrorبتشتغل عادي

✓ كل السلوكيات دي متحقق منها بتشغيل Node.js فعلي (2026-08-03).

Scope وسلسلة البحث (من درس 0003)

✓ متحقق من كل السلوكيات بتشغيل Node.js فعلي (2026-08-04).

قواعد الـ this الأربعة (من درس 0005)

الأولويةشكل النداءthis بيبقى
1 — newnew Person()الأوبجكت الجديد اللي بيتبني
2 — explicitf.call(obj) / apply / bindالـ obj اللي حددته بإيدك
3 — implicitobj.f()اللي قبل النقطة
4 — defaultf()globalThis (undefined في strict)

✓ متحقق من القواعد الأربعة وأولويتهم بتشغيل Node.js فعلي (2026-08-04).

Closures (من درس 0010)

✓ متحقق من كل السلوكيات بتشغيل Node.js فعلي (2026-08-14). الدرس المرتبط: 0010 — Closures.

Currying (من درس 0011)

✓ متحقق من كل السلوكيات بتشغيل Node.js فعلي (2026-08-14). الدرس المرتبط: 0011 — Currying.

روابط