Der Grund, warum dies funktioniert, ist eine Folge dessen, was man als Hochziehen bezeichnet. Das Hochziehen verschiebt die Deklaration der Variablen an die Spitze des Bereichs. So Ihre Funktion sieht wirklich so aus:.
function() {
var a;
if(true) {
a = 5;
}
alert(a);
}
„Da Variablendeklarationen (und Erklärungen im Allgemeinen) verarbeitet werden, bevor ein Code ausgeführt wird, an jedem Ort der Deklaration eine Variablen im Code entspricht es an der Spitze zu erklären Diese bedeutet auch, dass eine Variable scheinbar vor der Deklaration verwendet wird. Dieses Verhalten wird als "Hochziehen" bezeichnet, da die Variablendeklaration scheinbar an den Anfang der Funktion oder des globalen Codes verschoben wird. " - var MDN
Einfach nur neugierig, was ist der Sinn des 'if' sowieso blockieren ... – War10ck
@pstenstrm - Es gibt nur eine Funktion hier beteiligt sind, und es werden keine Aussagen außerhalb. Verschlüsse sind irrelevant. – Quentin
@pstenstrm Verschluss? Es gibt hier keine Schließung. –