برنامه نویسی

بالا بردن در جاوا اسکریپت – انجمن DEV

بالا بردن ساده می دهد ویژگی های بالاتر برای اعلان های جاوا اسکریپت. بنابراین، کامپیوتر را قبل از تجزیه و تحلیل کدهای دیگر در برنامه، ابتدا می خواند و پردازش می کند.

توجه: میزبانی به معنای تنظیم مجدد جاوا اسکریپت یا انتقال کد به بالای یکدیگر نیست.

به عنوان مثال

console.log(name); 
// Uncaught ReferenceError: name is not defined
let name="Deepa"; 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • متغیرهای اعلام شده با let و const بالا می روند اما با مقدار پیش فرض مقداردهی اولیه نمی شوند.
  • دسترسی به let یا const قبل از اعلان نشان می دهد: Uncaved ReferenceError: قبل از مقداردهی اولیه نمی توان به آن دسترسی پیدا کرد
  • به یاد داشته باشید که پیغام خطا می گوید متغیر در جایی مقداردهی اولیه شده است.

بالابر متغیر با var

هنگامی که مفسر یک متغیر اعلام شده با var را افزایش می دهد، مقدار آن را بر خلاف let یا const به undefined مقداردهی اولیه می کند.
به عنوان مثال

console.log(name); // undefined
var name="deepa";
console.log(name); // deepa
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حال بیایید این رفتار را تحلیل کنیم:

var name;
console.log(name); // undefined
name="partha";
console.log(name); // partha
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به یاد داشته باشید، اولین خروجی console.log(name). تعریف نشده است زیرا نام بلند شده است، و یک مقدار پیش فرض داده می شود (نه به این دلیل که متغیر هرگز اعلام نشده است).

استفاده از متغیر تعریف نشده ReferenceError را ایجاد می کند

console.log(name); // Uncaught ReferenceError: name is not defined

حالا بیایید ببینیم که آیا var را اعلام نکنیم که چه اتفاقی می افتد.

console.log(name); // partha
name="partha";

name = تخصیص متغیری که اعلام نشده معتبر است.

جاوا اسکریپت به ما این امکان را می دهد که قبل از اعلام متغیر به آنها دسترسی داشته باشیم. این رفتار بخشی غیرعادی از جاوا اسکریپت است و می تواند منجر به خطا شود.

استفاده از متغیر قبل از اعلان آن مطلوب نیست.

منطقه مرده موقت

دلیل اینکه هنگام تلاش برای دسترسی به let یا const قبل از اعلام آن، خطای مرجع دریافت می کنیم منطقه مرده معتدل

به عنوان مثال

{
    // start of foo's TDZ
    let bar="bar";
    console.log(bar); // bar
    console.log(foo); // ReferenceError: Because we're in TDZ
    let foo = 'foo';
    // end of foo's TDZ
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بالابر عملکردی

اعلامیه‌های عملکرد نیز بالا می‌روند. عملکرد بالابر به ما اجازه می دهد تا تابع را قبل از اعلام یا تعریف آن فراخوانی کنیم.


foo(); 
function foo() {
    console.log('foo'); // foo
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه: فقط اعلان تابع بالا می رود نه عبارات تابع.

به عنوان مثال

foo(); // Uncaught TypeError: foo is not a function
var foo = function() {

}

bar(); // Uncaught ReferenceError
let bar = function() {

}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خطای مرجع کشف نشده: نمی توان به نوار قبل از مقداردهی اولیه به طور مشابه برای const دسترسی پیدا کرد.

برای تابعی که هرگز اعلان نمی شود:

foo(); // Uncaught ReferenceError: foo is not defined
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا