Membongkar JavaScript: Menyelam Mendalam ke dalam Hoisting, Zon Mati Sementara dan Keadaan Boleh Ubah

WBOY
Lepaskan: 2024-07-26 18:11:53
asal
417 orang telah melayarinya

Unraveling JavaScript: A Deep Dive into Hoisting, Temporal Dead Zone, and Variable States

Di bawah saya mempunyai 2 baris kod yang manis dan ringkas. Tetapi saya boleh menjamin anda bahawa Ia sama ada akan mengelirukan (kerana anda mengabaikan prinsip garis bawah JS) atau menghiburkan anda.

Tetapi ia telah memuatkan sepenuhnya konsep pengetahuan seperti di bawah

  • Mengangkat
  • Zon mati sementara
  • pembolehubah (tidak diisytiharkan, tidak dimulakan, tidak ditentukan) (Bonus)

Kenyataan saya yang bercanggah
seperti var, const dan biarkan juga mengangkat sifat mereka, tetapi mereka berada di zon yang berbeza.

mengangkat Def (Versi mudah / awam)

  1. kita boleh mengakses fungsi dan pembolehubah sebelum pengisytiharan sebenar.

Kini tiba masanya untuk mendalami cara Js menyusun dan melaksanakan kod 2 baris kami

Dalam JavaScript, cara pengkompil dan enjin mengendalikan pengisytiharan dan penetapan boleh ubah boleh diubah, terutamanya apabila berurusan dengan let dan var.
Mari kita pecahkan proses dari kedua-dua pengkompil dan perspektif pelaksanaan untuk kod yang diberikan:

name = 'ashu';
let name;
Salin selepas log masuk

pada ketika ini saya menjelaskan bahawa apabila kita menulis kod javascript, penghurai pertama dan pengkompil menyusun kod kita kemudian ia masuk ke fasa pelaksanaan.

Perspektif Penyusun
Barisan Pertama: nama = 'ashu';

Semasa fasa kompilasi,
enjin JavaScript menghuraikan kod dan mencipta skop yang diperlukan.
Nama tugasan = 'ashu';

akan diperhatikan, tetapi pada peringkat ini, enjin tidak melaksanakan kod; ia hanya merekodkan kewujudan tugasan kepada pembolehubah bernama nama.

Jika nama belum diisytiharkan sebelum ini, pengkompil menganggapnya sebagai tugasan kepada pembolehubah global (nama var dalam skop global) memandangkan pengisytiharan var dinaikkan dan boleh diakses secara global.

Barisan Kedua: biarkan nama;

Apabila pengkompil menemui nama let; pengisytiharan, ia memperakui bahawa nama harus dilindungi skop.

Pengkompil meletakkan nama dalam Zon Mati Sementara (TDZ) untuk skop yang dimiliki,
bermakna ia mengakui kewujudan nama tetapi menandakannya sebagai tidak dimulakan.

Pengisytiharan biarkan tidak dinaikkan dengan cara yang sama seperti var.

Sebaliknya, ia mewujudkan ikatan dalam skop dan memulakannya hanya apabila pengisytiharan dilaksanakan.

Perspektif Pelaksanaan

Barisan Pertama: nama = 'ashu';

Apabila enjin JavaScript melaksanakan nama tugasan = 'ashu';,
ia menyemak kewujudan nama dalam skop semasa. Memandangkan nama diisytiharkan dengan let tetapi berada dalam TDZ (Zon Mati Sementara), sebarang percubaan untuk mengaksesnya sebelum pengisytiharan let dimulakan akan mengakibatkan ReferenceError.

Oleh itu, pada ketika ini, nama berada dalam TDZ, dan nama tugasan = 'ashu'; menghasilkan ReferenceError.


Barisan Kedua: biarkan nama;

Baris ini memulakan pembolehubah nama dalam skop blok.
Selepas titik ini, nama tiada lagi dalam TDZ dan boleh diakses atau diberikan tanpa ralat.

Sekarang Bonus tip

perbezaan Antara tidak mengisytiharkan vs tidak jelas vs tidak tahu;

nyahisytihar :- pembolehubah belum diisytiharkan lagi.
undefined :- Pembolehubah diisytiharkan tetapi tidak dimulakan;
tidak dimulakan :- pembolehubah ditakrifkan tetapi nilainya akan datang kemudian.

Cth:- hasil const = darabBy2(5);
sehingga nilai retun funciton akan ditetapkan untuk menghasilkan sehingga titik itu ia akan berada dalam zon yang tidak dimulakan.

Fakta menarik:-

Anda tahu zon mati duniawi pada mulanya dihiasi untuk Const tetapi lewat masa yang mereka pakai dalam **Let**

Rujukan:-

  1. https://frontendmasters.com/courses/deep-javascript-v3 + Analogi saya bersama dengan juruterbang bersama GitHub

Atas ialah kandungan terperinci Membongkar JavaScript: Menyelam Mendalam ke dalam Hoisting, Zon Mati Sementara dan Keadaan Boleh Ubah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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!