Rumah > hujung hadapan web > tutorial js > Mengapa Kod JavaScript Ini Makluman '1' Daripada '10'?

Mengapa Kod JavaScript Ini Makluman '1' Daripada '10'?

Susan Sarandon
Lepaskan: 2024-12-22 04:57:09
asal
186 orang telah melayarinya

Why Does This JavaScript Code Alert

Memahami JavaScript Hoisting dan Scoping melalui Contoh yang Menarik

Dalam artikel baru-baru ini, Ben Cherry memberi penerangan tentang konsep menarik JavaScript mengenai angkat dan skop . Untuk menggambarkan, dia membentangkan kod berikut:

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}
b();
alert(a);
Salin selepas log masuk

Jangkaan vs. Realiti

Secara intuitif, seseorang mungkin menjangkakan amaran untuk memaparkan "10" kerana fungsi a diisytiharkan dalam tempoh b. Walau bagaimanapun, penyemak imbas memaparkan "1" sebaliknya.

Memahami Pengangkat dan Scoping

Mengangkat ialah fenomena di mana fungsi dialihkan ke bahagian atas skopnya. Ini bermakna kod berikut akan ditulis semula oleh penterjemah:

function b() {
  a = 10;
  return;
  function a() {}
}
Salin selepas log masuk

Menariknya, JavaScript juga membenarkan pengisytiharan pembolehubah dalam fungsi menggunakan fungsi sintaks a() {}. Ini bersamaan dengan var a = function () {};.

Memahami Urutan Pelaksanaan

Kod pada dasarnya berfungsi seperti berikut:

  • a ditakrifkan dalam skop global dengan nilai 1.
  • Fungsi b ialah diisytiharkan dan dinaikkan.
  • Di dalam b, pembolehubah a diisytiharkan dalam skop setempat menggunakan fungsi a() {} (bersamaan dengan var a = fungsi () {};). Ini mencipta tika berasingan bagi a.
  • a kemudian ditimpa dalam skop setempat dengan nilai 10.
  • b kembali, dan tika tempatan a terkeluar daripada skop.
  • alert(a) mengakses pembolehubah global a, yang masih mengekalkan nilainya 1.

Oleh itu, amaran memaparkan "1" dan bukannya "10" kerana pembolehubah global a tidak terjejas oleh perubahan yang dibuat kepada pembolehubah tempatan a dalam fungsi.

Atas ialah kandungan terperinci Mengapa Kod JavaScript Ini Makluman '1' Daripada '10'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan