In einigen Programmiersprachen wie C hat jeder Codeabschnitt in geschweiften Klammern seinen eigenen Bereich, und Variablen sind außerhalb des Codesegments, in dem sie deklariert sind, nicht sichtbar. Wir nennen diesen Bereich auf Blockebene (Blockbereich). ), und es gibt keinen Bereich auf Blockebene in JavaScript. Stattdessen verwendet JavaScript den Funktionsumfang: Eine Variable wird im Hauptteil der Funktion definiert, in der sie deklariert ist, sowie im Hauptteil aller Funktionen, in denen sie verschachtelt ist. Im folgenden Code sind i, j und k, die an unterschiedlichen Positionen definiert sind, alle im selben Bereich
definiert
Funktionstext(o)
{
var i=0;
alarm(typeof o);
If(typeof o == "string")
{
var j=0;
for(var k=0;k<10;k )
warning(k);//Ausgabe 0-9
alarm(k);//Ausgabe 10
}
alarm(j);//Ausgabe 0
}
Der Funktionsumfang von JavaScript bedeutet, dass alle innerhalb der Funktion deklarierten Variablen immer im Funktionskörper sichtbar sind. Interessanterweise bedeutet dies, dass die Variable bereits verfügbar ist, bevor sie überhaupt deklariert wird. Diese Funktion von JavaScript wird umgangssprachlich als „Hoisting“ bezeichnet, d. h. alle im JavaScript-Funktionskörper deklarierten Variablen (ohne Zuweisung) werden an den Anfang des Funktionskörpers „vorgerückt“. Schauen Sie sich den folgenden Code an
Funktion globals()
{
alarm(global);//undefiniert
var global="Hallo QDao";
alarm(global);//Hallo QDao
}
Aufgrund der Eigenschaften des Funktionsumfangs werden lokale Variablen immer im gesamten Funktionskörper definiert, was bedeutet, dass Variablen innerhalb des Funktionskörpers globale Variablen mit demselben Namen abdecken. Lokale Variablen werden jedoch erst dann tatsächlich zugewiesen, wenn das Programm die var-Anweisung ausführt. Daher entspricht der obige Vorgang dem „Vorrücken“ der Variablendeklaration innerhalb der Funktion an den Anfang des Funktionskörpers, während die Variableninitialisierung dort belassen wird ursprüngliche Position. :
Code kopieren
{
var global;
alarm(global);//undefiniert
global="Hallo QDao";
alarm(global);//Hallo QDao
}