var a;
if (true) {
a = 5;
function a() {}
a = 0;
console.log(a)
}
console.log(a)
Widziałem powyższy kod, funkcja jest zadeklarowana w {}. Myślę, że wypisze 0 0, ale wypisze 0 5
javascript
Marcus Lee
źródło
źródło
0 undefined
.a = 5
opuszcza blok. Według bergi w dupe,function a
zostanie podniesiony.Odpowiedzi:
Zdarza się:
(1) Istnieją dwie deklaracje zmiennych
a
, jedna wewnątrz bloku, a druga poza nim.(2) Deklaracja funkcji zostaje podniesiona i powiązana ze zmienną bloków wewnętrznych.
(3)
a = 5
zostaje osiągnięty, co zastępuje zmienną blokową.(4) deklaracja funkcji została osiągnięta, a zmienna blokowa jest kopiowana do zmiennej zewnętrznej. Obaj mają teraz 5 lat.
(5)
a = 0
został osiągnięty, co zastępuje zmienną blokową. Nie ma to wpływu na zmienną zewnętrzną.To tak naprawdę nie jest częścią specyfikacji, jest częścią semantyki zgodności ze starszymi wersjami sieci , więc nie deklaruj funkcji w blokach i nie polegaj na tym kodzie, aby zachowywał się w ten sposób .
Wyjaśniono to również tutaj
źródło