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

WBOY
Lepaskan: 2024-07-26 18:11:53
asal
532 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 dalam zon 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 pembolehubah 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 kami menulis kod javascript, penghurai pertama dan pengkompil menyusun kod kami kemudian ia masuk ke fasa pelaksanaan.

Perspektif Penyusun
Barisan Pertama: nama = 'ashu';

Semasa fasa penyusunan,
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 mengakui bahawa nama harus disekat.

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.

Kini Petua Bonus

perbezaan Antara tidak diisytiharkan lwn tidak ditentukan lwn tidak dimulakan;

nyahisytihar :- pembolehubah belum diisytiharkan lagi.
tidak ditentukan :- 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 ketika itu ia akan berada dalam zon tidak dimulakan.

Fakta menarik:-

Anda tahu zon mati temporal 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!