var a;
if (true) {
a = 5;
function a() {}
a = 0;
console.log(a)
}
console.log(a)
Saya melihat kode di atas, fungsi dideklarasikan dalam {}. Saya pikir itu akan mencetak 0 0, tetapi mencetak 0 5
javascript
Marcus Lee
sumber
sumber
0 undefined
.a = 5
meninggalkan blok. Menurut bergi dalam penipuan itu,function a
akan diangkat.Jawaban:
Berikut ini terjadi:
(1) Ada dua deklarasi variabel
a
, satu di dalam blok dan satu di luarnya.(2) Deklarasi fungsi diangkat, dan terikat ke variabel blok dalam.
(3)
a = 5
tercapai, yang menimpa variabel blok.(4) deklarasi fungsi tercapai, dan variabel blok disalin ke variabel luar. Keduanya 5 sekarang.
(5)
a = 0
tercapai, yang menimpa variabel blok. Variabel luar tidak terpengaruh oleh ini.Ini sebenarnya bukan bagian dari spesifikasi, ini adalah bagian dari semantik kompatibilitas web warisan , jadi jangan mendeklarasikan fungsi di dalam blok dan tidak bergantung pada kode ini untuk berperilaku dengan cara ini .
Ini juga dijelaskan di sini
sumber