Dalam ES6, pembolehubah yang diisytiharkan dengan let atau const kelihatan mempamerkan tingkah laku angkat yang tidak konsisten berbanding dengan var.
Pertama, adalah penting untuk jelaskan bahawa semua pengisytiharan dalam JavaScript dinaikkan, termasuk yang menggunakan let, const, var, function, function* dan class. Ini bermakna semua pengisytiharan ini boleh dilihat di seluruh skop yang ditakrifkan.
Perbezaan utama bukan terletak pada pengangkatan tetapi pada permulaan daripada let dan const pembolehubah.
Jurang temporal ini antara pengisytiharan dan permulaan mewujudkan salah tanggapan tentang pengangkatan.
Untuk biarkan dan pembolehubah const, tempoh antara pengisytiharan dan permulaan dikenali sebagai mati sementara zon. Pada masa ini, mengakses pembolehubah menghasilkan ReferenceError.
x = y = "global"; (function() { console.log(x); // undefined console.log(y); // Reference error: y is not defined var x = "local"; let y = "local"; }());
Dalam contoh ini, var dan biarkan pembolehubah x dan y diisytiharkan di bahagian atas skop fungsi. Walau bagaimanapun, pemboleh ubah let y tidak dimulakan sehingga kemudian, mewujudkan zon mati temporal di mana mengakses y melemparkan ralat.
Semasa semua pengisytiharan dalam JavaScript dinaikkan, pembolehubah let dan const mempamerkan tingkah laku permulaan yang berbeza. Tingkah laku ini membawa kepada persepsi "tidak dinaikkan" tetapi sebenarnya disebabkan oleh zon mati temporal yang dicipta oleh permulaan lewat. Kedua-dua pembolehubah let dan const berfungsi secara sama dari segi pengangkatan.
Atas ialah kandungan terperinci Mengapakah `let` dan `const` Nampaknya Tidak Ditingkatkan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!