English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسيات JavaScript

مثل JavaScript

وظائف JavaScript

HTML DOM JS

BOM محرك الويب JS

دليل أساسيات AJAX

دليل JavaScript

رفع JavaScript (Hoisting)

في JavaScript، بغض النظر عن المكان الذي يتم فيه تعريفها، فإن جميع إعلانات المتغيرات والوظائف تتحرك أو ترفع إلى أعلى نطاقها الحالي. هذا سلوك محرك الترجمة الافتراضي يُسمىhoisting(رفع).

رفع الوظائف (Hoisting)

تتميز الوظائف المحددة باستخدام إعلان الوظيفة برفعها تلقائيًا.

هذا يعني أنه يمكن استدعاؤها قبل تعريفها.

// استدعاء الوظيفة قبل إعلانها
greet();
function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
اختبر هذا < / >

كما ترون، قمنا بتشغيلgreet()وظيفة، ولكن الكود لا يزال صالحًا. هذا لأن إعلان الوظيفة يتم رفعه تلقائيًا إلى أعلى في الخلفية.

الرفع هو سلوك افتراضي لـ JavaScript لتحريك الإعلانات إلى أعلى.

JavaScript يرفع الاشارات فقط

JavaScript يرفع الاشارات فقط، وليس التوليد. إذا تم إعلان وتوليد المتغير بعد استخدامه، فإن القيمة ستكون غير معروفة.

document.write(num); // undefined 
var num;
num = 50;
اختبر هذا < / >

إذا تم إعلان المتغير بعد استخدامه، لكن تم تثبيته مسبقًا، فإنه سيعود لهذا القيمة:

num = 50;
document.write(num); // 50
var num;
اختبر هذا < / >

باستخدامletأوconstغير الاشارات غير المعلنة والمتغيرات.

إعلان JavaScript غير المرفوع

JavaScript يرفع الاشارات فقط، وليس التوليد.

هذه العينتان تنتجان نتائج مختلفة:

مثال1:
var x = 1; // تعريف x
var y = 2; // تعريف y
document.write(x + " " + y); // 1 2
اختبر هذا < / >
مثال 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" في الفصل التالي.