ما هو الرفع في JavaScript؟

شرح موجز لما يعنيه الرفع في لغة برمجة جافا سكريبت

تقوم JavaScript قبل تنفيذ التعليمات البرمجية بتحليلها ، وتضيف إلى ذاكرتها الخاصة كل وظيفة وإعلانات متغيرة تجدها ، وتحتفظ بها في الذاكرة. هذا يسميالرفع.

لدينا بعض السلوكيات المختلفة للإعلانات الوظيفية والتعبيرات الوظيفية.

باستخدام إعلانات الوظائف ، يمكننا استدعاء دالة قبل تعريفها ، وسيعمل الكود الخاص بنا. في الحالات الأخرى ، سيكون لدينا أخطاء.

تتمثل القاعدة العامة في تحديد الوظائف والمتغيرات والأشياء والفئات دائمًا قبل استخدامها لتجنب المفاجآت.

افترض أن لدينا وظيفة:

function bark() {
  alert('wof!')
}

نظرًا للرفع ، يمكننا الاستدعاء تقنيًاbark()قبل الإعلان عنها:

bark()
function bark() {
  alert('wof!')
}

مع الوظائف ، يحدث هذا فقط لـإعلانات الوظائف. كما في الحالة أعلاه.

ليس مع تعبيرات الوظيفة.

هذا تعبير وظيفي:

bark()
var bark = function() {
  alert('wof!')
}

في هذه الحالة ، فإنvarيتم رفع الإعلان وتهيئته باستخدامundefinedكقيمة ، شيء من هذا القبيل:

var bark = undefined
bark()
bark = function() {
  alert('wof!')
}

سيعطيك تشغيل هذا الرمزTypeError: bark is not a functionخطأ.

constوletيتم رفع الإعلانات أيضًا ، لكن لم تتم تهيئتها إلى غير معرف مثلvar.

const bark = function() {
  alert('wof!')
}

أو

let bark = function bark() {
  alert('wof!')
}

في هذه الحالة ، إذا قمت باستدعاءbark()قبل التصريح عنه ، سوف يعطيك ملفReferenceError: Cannot access 'bark' before initializationخطأ.

سيحدث الشيء نفسه لأي تعبير آخر يقوم بتعيين كائن أو فئة إلى متغير

تعمل إعلانات الفصل مثلletوconstالإعلانات: يتم رفعها ، ولكن لم يتم تهيئتها ، واستخدام فئة قبل إعلانها سيعطي aReferenceError: <Class> is not definedخطأ.


المزيد من دروس js: