Rumah >hujung hadapan web >tutorial js >Mari kita bincangkan tentang promosi pengisytiharan dalam JavaScript

Mari kita bincangkan tentang promosi pengisytiharan dalam JavaScript

WBOY
WBOYke hadapan
2022-11-14 17:59:021190semak imbas

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");
}

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();

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'

Hasil penghuraian kod di atas ialah:

var foo;console.log(foo);
foo = "bar";console.log(foo);

Ini mungkin membawa kepada beberapa masalah pelik:

var x = "x in global";

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

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;    // ...}

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";
})();

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 {}

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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam