Scope
Der Scope ist der aktuelle Ausführungskontext, in dem Werte und Ausdrücke "sichtbar" sind oder referenziert werden können. Wenn eine Variable oder ein Ausdruck sich nicht im aktuellen Scope befindet, steht er nicht zur Verwendung bereit. Scopes können auch hierarchisch geschichtet werden, sodass Kind-Scopes Zugriff auf Eltern-Scopes haben, aber nicht umgekehrt.
JavaScript kennt folgende Arten von Scopes:
- Globaler Scope: Der Standardscope für alle im Skriptmodus laufenden Codes.
- Modul-Scope: Der Scope für im Modulmodus laufenden Code.
- Funktions-Scope: Der mit einer Funktion erstellte Scope.
Darüber hinaus können mit bestimmten Syntaxen deklarierte Bezeichner, einschließlich let
, const
, class
oder (im strikten Modus) function
, zu einem zusätzlichen Scope gehören:
- Block-Scope: Der Scope, der mit einem Paar geschweifter Klammern (einem Block) erstellt wird.
Eine Funktion erstellt einen Scope, sodass (zum Beispiel) eine ausschließlich innerhalb der Funktion definierte Variable von außerhalb der Funktion oder innerhalb anderer Funktionen nicht zugegriffen werden kann. Zum Beispiel ist das Folgende ungültig:
function exampleFunction() {
const x = "declared inside function"; // x can only be used in exampleFunction
console.log("Inside function");
console.log(x);
}
console.log(x); // Causes error
Das folgende Beispiel ist hingegen gültig, da die Variable außerhalb der Funktion deklariert wurde und somit global ist:
const x = "declared outside function";
exampleFunction();
function exampleFunction() {
console.log("Inside function");
console.log(x);
}
console.log("Outside function");
console.log(x);
Blöcke scopen nur let
- und const
-Deklarationen, nicht aber var
-Deklarationen.
{
var x = 1;
}
console.log(x); // 1
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
Siehe auch
- Scope (Informatik) auf Wikipedia
- Regeln für Block-Scoping