Hoisting هو سلوك جافا سكريبت الذي ينقل التصريحات إلى أعلى نطاقها أثناء مرحلة التجميع، قبل تنفيذ أي كود. لكن كيف يتم رفع الشيء يختلف حسب نوع التصريح.
js
.(a);
a = ;
();
() { .(); }
.(b);
b = ;
Hoisting هو سلوك جافا سكريبت الذي ينقل التصريحات إلى أعلى نطاقها أثناء مرحلة التجميع، قبل تنفيذ أي كود. لكن كيف يتم رفع الشيء يختلف حسب نوع التصريح.
.(a);
a = ;
();
() { .(); }
.(b);
b = ;
var: التصريح يتم رفعه وتهيئته بقيمة undefined. لذا قراءته مبكراً تعطي undefined، وليس خطأ.function: يتم رفعها بالكامل — يمكنك استدعاؤها قبل سطر تعريفها.let / const: يتم رفعها لكن لا تتم تهيئتها. تبقى في المنطقة الميتة الزمنية (TDZ) من بداية الكتلة حتى سطر التصريح؛ الوصول إليها في TDZ يرمي خطأ ReferenceError.const f = () => {}) لا يمكن استدعاؤها مبكراً — فقط ربط const/var يتم رفعه، وليس الدالة.الرفع يشرح "لماذا هذا undefined؟" و"لماذا يعمل استدعاء هذه الدالة قبل تعريفها؟" إن المنطقة الميتة الزمنية (TDZ) لـ let/const هي في الواقع ميزة — فهي تحول أخطاء undefined الصامتة إلى أخطاء صاخبة، مما يشجعك على التصريح قبل الاستخدام.