This answer hat eine wirklich schöne Erklärung dessen, was hier vor sich geht.
Die Zusammenfassung ist, dass Javascript in zwei Phasen, Kompilierung und dann Ausführung verarbeitet wird. Die Funktionsdefinitionen treten während des Kompilierungsschritts auf, so dass der Compiler innerhalb von b
die Definition function a() {}
sieht und die lokale Variable a
im Rahmen von b
erstellt wird. Später, wenn der Code ausgeführt wird, enthält der Gültigkeitsbereich von b
bereits die lokale Variable a
, bevor ein Code ausgeführt wird, so dass die Zeile a = 10;
der lokalen Variablen nur einen neuen Wert gibt. Die Funktionsdefinition wurde bereits während der Kompilierung verarbeitet, so dass sie während der Ausführung nicht auftritt. Daher gibt console.log(a)
10
aus.
+1 für die Erwähnung von 'hosting' – sabithpocker
Definiert' a' als Funktion innerhalb von 'b', wobei 'a' lokal zu' b' ist, auch ohne explizit eine 'var a' zu machen. Was ist die Magie hinter dem impliziten lokalen Geltungsbereich? – sabithpocker
+1 gutes Beispiel – John