المتغيرات هي شئ اساسي في كتابة اى برنامج او تطبيق ويعد رفع المتغيرات في جافاسكريبت امر وجانب هاما للعمل مع المتغيرات في تطبيقك.

الرفع "hoisting " هي أليه لرفع المتغيرات الي اعلي النطاق بمعني انك لو قمت بتعريف متغير تقوم الجافاسكريبت برفع المتغير الي اعلي النطاق دون قيمته.

 function hositing() {
  console.log(x); // undefined
  var x = 3;
  console.log(x) // 3
 }

ما حدث هنا ان جافاسكريبت قامت برفع المتغير و ليس قيمته الي الأعلي اى ان هذا ما يحدث:

  function hositing() {
    var x; // انتقلت الي اعلي النطاق
    console.log(x) // undefined
    x = 3; بقايا المتغير 
   console.log(x) // 3
 }

اذا جافاسكريبت تقوم برفع تعريف المتغير فقط الي الأعلي وليس القيمة و نري الفرق هنا:

 var x = 2; 
 console.log(x + " " + y) // 2  undefined
 var y = 3;

ما حدث هنا ان الجافا سكريبت قد قامت برفع المتغير y بدون قيمته الي الأعلي و عند تنفيذ الأمر لم يجد قيمة للمتغير y تم تعريفها بعد فكانت قيمته غير معرفه undefined.

 var y;
 var x = 2;
 console.log(x + " " + y) // 2 undefined

 y = 3;

عدم معرفتك بهذه الأليه سيعرضك للوقوع في الكثير من الأخطاء لذلك دائما ما ينصح بتعريف المتغيرات في بدايه النطاق.

واذا كنت تستخدم تطبيق الوضع الصارم "use strict" لن يسمح لك باستخدام المتغير الا اذا قمت بتعريفها.