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
Kenyataan saya yang bercanggah
seperti var, const dan biarkan juga mengangkat sifat mereka, tetapi mereka berada dalam zon berbeza.
mengangkat Def (Versi mudah / awam)
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;
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:-
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!