Gültigkeitsbereich

Der Gültigkeitsbereich ist der aktuelle Ausführungskontext, in dem Werte und Ausdrücke "sichtbar" sind oder referenziert werden können. Wenn eine Variable oder ein Ausdruck nicht im aktuellen Gültigkeitsbereich ist, steht sie nicht zur Verfügung. Gültigkeitsbereiche können auch in einer Hierarchie geschichtet sein, sodass untergeordnete Gültigkeitsbereiche Zugriff auf übergeordnete Gültigkeitsbereiche haben, aber nicht umgekehrt.

JavaScript hat die folgenden Arten von Gültigkeitsbereichen:

  • Globaler Gültigkeitsbereich: Der Standardgültigkeitsbereich für alle im Skriptmodus ausgeführten Codes.
  • Modul-Gültigkeitsbereich: Der Gültigkeitsbereich für im Modulmodus ausgeführte Codes.
  • Funktions-Gültigkeitsbereich: Der Gültigkeitsbereich, der durch eine Funktion erstellt wird.

Zusätzlich können mit bestimmten Syntaxen deklarierte Bezeichner, einschließlich let, const, class oder (im strikten Modus) function, zu einem zusätzlichen Gültigkeitsbereich gehören:

  • Block-Gültigkeitsbereich: Der Gültigkeitsbereich, der mit einem Paar geschweifter Klammern (einem Block) erstellt wird.

Eine Funktion erstellt einen Gültigkeitsbereich, sodass (zum Beispiel) eine Variable, die ausschließlich innerhalb der Funktion definiert ist, außerhalb der Funktion oder innerhalb anderer Funktionen nicht zugänglich ist. Zum Beispiel ist das folgende ungültig:

js
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

Der folgende Code ist jedoch gültig, da die Variable außerhalb der Funktion deklariert wurde und damit global ist:

js
const x = "declared outside function";

exampleFunction();

function exampleFunction() {
  console.log("Inside function");
  console.log(x);
}

console.log("Outside function");
console.log(x);

Blöcke haben nur Einfluss auf let- und const-Deklarationen, nicht jedoch auf var-Deklarationen.

js
{
  var x = 1;
}
console.log(x); // 1
js
{
  const x = 1;
}
console.log(x); // ReferenceError: x is not defined

Siehe auch