(function() {
if (false) {
let f = { g() => 1 };
}
return typeof f;
})()
In dem gegebenen Codebeispiel wird die interessante Frage aufgeworfen, welchen Wert eine in einer bedingten Anweisung deklarierte Variabel außerhalb dieser Bedingung hat. Die korrekte Antwort auf diese Frage ist "Fehler".
In JavaScript wird durch das Stichwort let
eine blocklevel Variable deklariert. Das bedeutet, dass die Variable nur innerhalb des Blocks, in dem sie deklariert wurde, verfügbar ist. Im gegebenen Beispiel wird die Variable f
innerhalb des if
-Blocks deklariert, aber außerhalb dieses Blocks wird versucht, auf sie zuzugreifen. Dies führt zu einem Fehler, da die Variable außerhalb ihres Blocks nicht definiert ist.
(function() {
if (false) {
let f = { g() => 1 };
}
return typeof f;
})()
In diesem Codebeispiel wird die Variable f
innerhalb der Bedingung if (false) { }
auf den Wert { g() => 1 }
gesetzt. Da die Bedingung jedoch immer falsch ist (false
), wird der Code innerhalb der Klammer { }
nie ausgeführt. Das heißt, die Variable f
wird niemals definiert.
Wenn der Code return typeof f;
ausgeführt wird, versucht JavaScript den Typ der Variablen f
zu ermitteln. Da die Variable jedoch niemals definiert wurde, wird ein Fehler ausgegeben.
Es ist wichtig zu verstehen, wie Block-Level-Scope in JavaScript funktioniert, um Fehler dieser Art zu vermeiden. Variablen, die mit let
innerhalb eines Blocks (wie if
-Statements, Schleifen oder Funktionen) deklariert werden, sind nur innerhalb dieses Blocks sichtbar. Um eine Variable in mehreren Blöcken oder außerhalb des Blocks verfügbar zu machen, kann es besser sein, sie außerhalb des Blocks zu deklarieren oder das Keyword var
anstelle von let
zu verwenden, da var
Variablen auf Funktionsebene deklariert, was bedeutet, dass sie innerhalb der gesamten Funktion sichtbar sind, in der sie deklariert werden.