English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في JavaScript، بغض النظر عن المكان الذي يتم فيه تعريفها، فإن جميع إعلانات المتغيرات والوظائف تتحرك أو ترفع إلى أعلى نطاقها الحالي. هذا سلوك محرك الترجمة الافتراضي يُسمىhoisting(رفع).
تتميز الوظائف المحددة باستخدام إعلان الوظيفة برفعها تلقائيًا.
هذا يعني أنه يمكن استدعاؤها قبل تعريفها.
// استدعاء الوظيفة قبل إعلانها greet(); function greet() { document.getElementById("output").innerHTML = "Hello World"; }اختبر هذا < / >
كما ترون، قمنا بتشغيلgreet()وظيفة، ولكن الكود لا يزال صالحًا. هذا لأن إعلان الوظيفة يتم رفعه تلقائيًا إلى أعلى في الخلفية.
الرفع هو سلوك افتراضي لـ JavaScript لتحريك الإعلانات إلى أعلى.
JavaScript يرفع الاشارات فقط، وليس التوليد. إذا تم إعلان وتوليد المتغير بعد استخدامه، فإن القيمة ستكون غير معروفة.
document.write(num); // undefined var num; num = 50;اختبر هذا < / >
إذا تم إعلان المتغير بعد استخدامه، لكن تم تثبيته مسبقًا، فإنه سيعود لهذا القيمة:
num = 50; document.write(num); // 50 var num;اختبر هذا < / >
باستخدامletأوconstغير الاشارات غير المعلنة والمتغيرات.
JavaScript يرفع الاشارات فقط، وليس التوليد.
هذه العينتان تنتجان نتائج مختلفة:
var x = 1; // تعريف x var y = 2; // تعريف y document.write(x + " " + y); // 1 2اختبر هذا < / >
var x = 1; // تعريف x document.write(x + " " + y); // 1 غير معرف var y = 2; // تعريف yاختبر هذا < / >
فيفي المثال 2،يتم رفع الإعلان فقط (var y) وليس التعريف (= 2) إلى الأعلى.
بسبب Hoisting، تم إعلان y قبل استخدامها، ولكن لم يتم تعريفها بعد، لذا قيمتها غير معرف.
النموذج المذكور أعلاه يفهم بصورة تلقائية كالتالي:
var x; // إعلان x var y; // إعلان y // انتهاء Hoisting. x = 1; // تعريف x document.write(x + " " + y); // 1 غير معرف y = 2; // تعريف yاختبر هذا < / >
Hoisting هو سلوك غير معروف أو مهمل في JavaScript.
إذا لم تفهم "Hoisting"، قد يحتوي البرنامج على أخطاء.
لتفادي الأخطاء، يرجى دائمًا إعلان جميع المتغيرات في بداية نطاق التشغيل.
ملاحظة:في الوضع الصارم، لا يسمح JavaScript باستخدام المتغيرات غير المعلنة.
ستتعرف على "use strict" في الفصل التالي.