در جاوااسكريپت بالا بردن تعاريف متغيرها در بالاي ميدان از رفتارهاي پيش فرض آن است.
در جاوااسكريپت يك متغير ميتواند بعداز دستور استفاده تعريف شود .بعبارت ديگر متغير ميتواند قبل از دستور تعريفي استفاده شود.
دو مثال زير داراي نتيجه يكساني دارند.
مثال 1 ـ دستور استفاده بالاتر ازتعريف
x = 5; // Assign 5 to x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x; // Display x in the element var x; // Declare x
مثال 2 ـ دستور تعريفي بالاتراز استفاده
var x; // Declare x x = 5; // Assign 5 to x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x; // Display x in the element
براي درك موضوع بايد اصلاح بالابردن(Hoisting) مشخص شود .
رفتار پيش فرض بالا بردن جاوااسكريپت براي دستوراتي تعريفي، اينستكه آن درستور در ابتداي ميدان جاري متغير يا تابع قرارميگيرد.
متغيرهاي تعريفي باlet , const در بالاي بلوك قرارداده مشوند ولي مقدار اوليه نميگيرند .اين بدين معني است كه بلوك كد ازمتغير آگاه است، اما نمي تواند ازآن تا موقعيكه تعريف نشده استفاده نمايد.
دستورlet براي تعريف متغيررا قبل از استفاده آن بكار بگيرد تا در استفاده نتيجه برگشتيReferecenceError نداشته باشيد .
متغير از شروع بلوك تا محل تعريفش، در يك ناحيه مرده اي قراردارد.
مثال ـ اين نتيجه برگشتيReferencenceError را دارد .
carName = "Volvo"; let carName;
استفاده متغير قبل ازconst براي تعريف آن متغير، خطايSyntax ايجاد ميكند . بنابراين آن بسادگي اجرا نميشود.
مثال ـ استفاده متغير قبل از كي وردlet كه اجرا نميشود .
carName = "Volvo"; const carName;
براي اطلاعات بيشتر به بخشهاي JS Const و JS Let مراجعه فرمائيد.
در جاوااسكريپت فقط تعاريف متغير بدون مقدار اوليه بالا رفتني ميباشند.
در زير مثالهاي يك ودو داراي نتيجه مشابهي نيستند.
مثال1
var x = 5; // Initialize x var y = 7; // Initialize y elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y
مثال2
var x = 5; // Initialize x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y var y = 7; // Initialize y
آيا نتيجه مثال دوم كهundefinded براي y است منطقي است .بله بدليل اينكه تعريف متغير y كد بعداز استفاده آن است بدون گرفتن مقداراوليه(=7) به بالا ميرود .
مثال ـ مثال دوم مطابق برنامه زير عمل ميكند.
var x = 5; // Initialize x var y; // Declare y elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y y = 7; // Assign 7 to y
تعريف متغيرها توسط توسعه دهندگان دربالا بيشتر براي رفتار هاي ناشنا خته وايجاد خطا در جاوااسكريپت است.
براي بروز از اشكالات احتمالي هميشه تعريف متغير هارا در بالاي دامنه قرار دهيد .با اين روش جاوااسكريپت مناسب ترين تفسير را براي آنها انجام ميدهد.
جاوااسكريپت در حالت سختگيرانه اجاز استفاده متغير تعريف نشده را نمي دهد .جهت اطلاعات بيشتر از كنترل سختگيرانه جاوااسكريپت فصل بعدي را مطالعه فرمائيد.