Mari kita bincangkan tentang promosi pengisytiharan dalam JavaScript

WBOY
Lepaskan: 2022-11-14 20:28:48
ke hadapan
1141 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang JavaScript, yang terutamanya memperkenalkan kandungan yang berkaitan tentang promosi perisytiharan ialah ciri penghurai JavaScript, yang akan menjejaskan fungsi dalam kod daripada pernyataan pengisytiharan pembolehubah diekstrak ke hadapan skop di mana ia terletak. Saya harap ia akan membantu semua orang.

Mari kita bincangkan tentang promosi pengisytiharan dalam JavaScript

[Cadangan berkaitan: Tutorial video JavaScript, bahagian hadapan web]

Peningkatan penyata (penghosan ) ialah ciri penghurai JavaScript, ia akan mengekstrak fungsi dan penyataan pengisytiharan berubah dalam kod ke hadapan skop di mana ia berada.

Promosi fungsi

JavaScript menyokong fungsi panggilan sebelum ia diisytiharkan.

say();function say() {  console.log("Hello");
}
Salin selepas log masuk

Penghuraikan akan mengimbas kod dalam skop dan mengekstrak pengisytiharan fungsi ke hadapan kod pelaksanaan. Jadi, beginilah cara penghurai melihat kod ini:

function say() {  console.log("Hello");
}say();
Salin selepas log masuk

Selain fungsi biasa, async function, function *, async function * juga mempunyai kesan peningkatan yang sama.

var Promosi pengisytiharan pembolehubah

var Perisytiharan pembolehubah kata kunci akan dinaikkan pangkat, tetapi penetapan pembolehubah tidak akan dinaikkan pangkat.

console.log(foo); // undefinedvar foo = "bar";console.log(foo); // 'bar'
Salin selepas log masuk

Hasil penghuraian kod di atas ialah:

var foo;console.log(foo);
foo = "bar";console.log(foo);
Salin selepas log masuk

Ini mungkin membawa kepada beberapa masalah pelik:

var x = "x in global";

(function () {  // 这里期望读取全局变量
  console.log(x); // 结果为undefined. 
  /* ... */
  // 在函数内某处
  var x = "x in function";
})();
Salin selepas log masuk

Dulu, mengikut urutan untuk mengelakkan peningkatan yang pelik ini, setiap orang secara amnya menulis pernyataan var di hadapan skop.

var x='x';var y='y';function (){    var x;    var foo;    // ...}
Salin selepas log masuk

Sudah tentu, kini kami memilih untuk tidak menggunakan var dan menggunakan let dan const yang lebih munasabah.

let dan const Pengisytiharan berubah dan zon mati

Jadi, tiada promosi berubah dalam let dan const? —— Tidak semestinya.

Lihat contoh ini:

const x = "x in global";

(function () {  // 这里期望读取全局变量
  console.log(x); // ReferenceError: Cannot access 'x' before initialization
  /* ... */
  // 在函数内某处
  const x = "x in function";
})();
Salin selepas log masuk

Ralat pelaksanaan dilaporkan, menunjukkan bahawa baris const x = "x in function"; mempengaruhi kod kawasan atas dalam skop. Penghurai

akan mengimbas pengisytiharan const dan let dalam skop semasa, dan ReferenceError akan dicetuskan jika nama pembolehubah digunakan sebelum pernyataan pengisytiharan. Ini mengelakkan var masalah angkat dan corak kod samar-samar yang dinyatakan di atas. Kesan yang sama berlaku dengan kata kunci

class, begitu juga dengan new kelas yang tidak diisytiharkan ReferenceError.

new MyClass(); // ReferenceError: Cannot access 'MyClass' before initializationclass MyClass {}
Salin selepas log masuk

Sesetengah orang berpendapat bahawa keadaan ini bukanlah satu penambahbaikan, lagipun, pengisytiharan dan penugasan tidak dibuat lebih awal; yang lain berpendapat bahawa kenyataan ini mempunyai kesan sebelum ia dilaksanakan, dan kesannya adalah bertambah baik. Secara peribadi, saya lebih suka yang terakhir, iaitu penambahbaikan pengecam (nama pembolehubah dan kelas).

Ringkasan

Kesan beberapa pernyataan pengisytiharan JavaScript akan mempengaruhi keseluruhan skop di mana ia berada Fenomena ini dipanggil promosi.

Terdapat 3 jenis angkat:

  • function Kedua-dua pengisytiharan dan penugasan kata kunci dinaikkan.
  • var Pengisytiharan kata kunci dipromosikan, tetapi tugasan tidak.
  • let, const, class Pengecam dinaikkan pangkat, membentuk zon mati dan pengisytiharan mahupun tugasan tidak digalakkan.

[Cadangan berkaitan: Tutorial video JavaScript, bahagian hadapan web]

Atas ialah kandungan terperinci Mari kita bincangkan tentang promosi pengisytiharan dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.im
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!