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 di zon yang 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 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;
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:-
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!