Freigeben über


Gültigkeitsbereich von Variablen und Konstanten

Aktualisiert: November 2007

JScript hat drei Gültigkeitsbereiche: global, lokal und Klasse. Wenn Sie eine Variable oder Konstante außerhalb einer Funktions- oder Klassendefinition deklarieren, ist diese Variable global, und ihr Wert kann im gesamten Programm abgerufen und verändert werden. Wenn Sie eine Variable innerhalb einer Funktionsdefinition deklarieren, ist diese Variable lokal. Sie wird bei jeder Ausführung der Funktion erstellt und anschließend zerstört. Ein Zugriff auf die Variable von außerhalb der Funktion ist nicht möglich. Wenn Sie eine Variable innerhalb einer Klassendefinition deklarieren, ist diese Variable innerhalb der Klasse verfügbar, und ein direkter Zugriff auf sie vom globalen Gültigkeitsbereich aus ist nicht möglich. Weitere Informationen finden Sie unter Auf Klassen basierende Objekte.

Erörterung

Sprachen wie C++ stellen außerdem einen "Block-Gültigkeitsbereich" bereit. Ein beliebiger Satz geschweifte Klammern definiert hierbei einen neuen Gültigkeitsbereich. JScript unterstützt keine Blockbereiche.

Eine lokale Variable kann denselben Namen wie eine globale Variable haben, allerdings sind beide vollständig voneinander getrennt. Folglich hat eine Änderung des Werts der einen Variablen keinen Einfluss auf die andere. Innerhalb der Funktion, in der die lokale Variable deklariert wurde, ist nur die lokale Version gültig. Dies wird als Sichtbarkeit bezeichnet.

// Define two global variables.
var name : String = "Frank";
var age : int = "34";

function georgeNameAge() {
   var name : String; // Define a local variable.
   name = "George";   // Modify the local variable.
   age = 42;          // Modify the global variable.
   print(name + " is " + age + " years old.");
}

print(name + " is " + age + " years old.");
georgeNameAge();
print(name + " is " + age + " years old.");

Die Ausgabe dieses Programms zeigt, dass eine lokale Variable modifiziert werden kann, ohne dass der Wert der globalen Variablen geändert wird. Änderungen an der globalen Variablen innerhalb der Funktion wirken sich auf den Wert im globalen Gültigkeitsbereich aus.

Frank is 34 years old.
George is 42 years old.
Frank is 42 years old.

JScript verarbeitet Variablen- und Konstantendeklarationen vor dem Ausführen von Code. Daher spielt es keine Rolle, ob sich die Deklaration innerhalb eines bedingten Blocks oder einem anderen Konstrukt befindet. Hat JScript alle Variablen und Konstanten gefunden, wird der Code in der Funktion ausgeführt. Das bedeutet, dass der Wert einer lokalen Konstanten undefined ist, bis die Anweisung für die Konstantendeklaration erreicht wird, und dass eine lokale Variable undefined ist, bis die Variable der Funktion zugewiesen wird.

Dies kann zu unerwartetem Verhalten führen. Betrachten Sie folgendes Programm:

var aNumber = 100;
var anotherNumber = 200;
function tweak() {
   var s = "aNumber is " + aNumber + " and ";
   s += "anotherNumber is " + anotherNumber + "\n";
   return s;
   if (false)  {
      var aNumber;                // This statement is never executed.
      aNumber = 123;              // This statement is never executed.
      const anotherNumber = 42;   // This statement is never executed.
   } // End of the conditional.
} // End of the function definition.

print(tweak());

Dieses Programm gibt Folgendes aus:

aNumber is undefined and anotherNumber is undefined

Es wäre zu erwarten, dass aNumber 100 oder 123 und anotherNumber 200 oder 42 ist, aber beide Werte sind undefined. Da sowohl aNumber als auch anotherNumber mit lokalem Gültigkeitsbereich definiert sind, spiegeln sie die globale Variabel und Konstante mit dem gleichen Namen. Da der Code, der die lokale Variable und Konstante initialisiert, nie ausgeführt wird, sind deren Werte undefined.

Die explizite Variablendeklaration ist im schnellen Modus erforderlich. Wenn der schnelle Modus deaktiviert ist, wird die implizite Variablendeklaration benötigt. Eine implizit deklarierte Variable innerhalb einer Funktion, d. h., eine Variable, die links von einem Zuweisungsausdruck ohne das var-Schlüsselwort auftritt, ist eine globale Variable.

Siehe auch

Konzepte

Nicht definierte Werte

Weitere Ressourcen

JScript-Variablen und -Konstanten