Verwandte Lektüre: Sprechen Sie über mein Verständnis von JavaScript-Prototypen und Abschlussserien (Shuishou Note 6)
Geltungsbereich
Zitieren der Definition des Umfangs aus „JavaScript Language Essence and Programming Practice“:
Der Variablenbereich wird auch als Sichtbarkeit von Variablen bezeichnet. Der variable Umfang vervollständigt die Verschleierung von Informationen und soll das Problem der „Fragmentierung“ lösen.
Es gibt keinen Bereich auf Blockebene in js (es gibt ein let in ES6, das in {} deklariert werden kann, wenn und für, und der Bereich ist auf die Blockebene beschränkt. Es gibt keine Variablenheraufstufung für Variablen erklärt von let! Wir werden hier nicht darüber sprechen, weil ich es zufällig gesehen habe).
Wenn wir Code schreiben, sollten wir keine Variablen im „Block“ deklarieren. Wir sollten sie am Anfang des Codes deklarieren, um Mehrdeutigkeiten zu vermeiden.
for(var i = 0; i < 10; i++) { //不好的声明方式
//...
}
console.log(i);
/*----------------------------------------------*/
var i = 0; //好的声明方式
for(i = 0; i < 10; i++) {
//....
}
console.log(i);
Nach dem Login kopieren
JavaScript verfügt neben dem globalen Geltungsbereich auch über einen Funktionsumfang.
Wenn wir Variablen deklarieren, wird der globale Code am Frontend deklariert, und in Funktionen deklarierte Variablen müssen vor dem Funktionskörper deklariert werden. Gleichzeitig muss bei der Variablendeklaration der Operator „var“ verwendet werden.
var a = 10, //全局作用域
b = 20;
function fn() { //fn函数作用域
var a = 100,
c = 300;
function bar() { //bar函数作用域
var a = 1000,
d = 4000;
}
}
Nach dem Login kopieren
Globaler Code, Fn-Funktion und Balkenfunktion bilden alle einen Bereich. Bereiche haben eine übergeordnete-untergeordnete Beziehung, und die übergeordnete-untergeordnete Beziehung hängt vom Bereich ab, in dem die Funktion erstellt wird. Die Balkenfunktion wird im Fn-Funktionsbereich erstellt. Der „FN-Funktionsbereich“ ist dem „Balkenfunktionsbereich“ überlegen.
Der größte Nutzen des Bereichs besteht darin, Variablen mit demselben Namen in verschiedenen Bereichen zu isolieren
--------------------------------- --- ----------------------------------
Der Umfang wird bestimmt, wenn die Funktion definiert wird, nicht wenn die Funktion aufgerufen wird.
1. Die globale Kontextumgebung wurde beim Laden des Programms bestimmt und Variablen werden bei der Ausführung des Programms Werte zugewiesen.
2. Führen Sie die Ausführung in Zeile 36 aus, rufen Sie fn(10) auf, erstellen Sie den Ausführungskontext der fn-Funktion, verschieben Sie den Stapel und setzen Sie diesen Kontext in den aktiven Zustand.
3. Führen Sie die Ausführung in Zeile 32 aus, rufen Sie bar(100) auf, erstellen Sie den Ausführungskontext der Funktion bar(100), verschieben Sie den Stapel und setzen Sie diesen Kontext in den aktiven Zustand.
4. Nachdem bar(100) aufgerufen wurde, wird es vom Stapel entfernt und der Kontext der Funktion bar(100) wird zerstört. Führen Sie dann Zeile 33 aus, rufen Sie bar(200) auf, erstellen Sie den Ausführungskontext der Funktion bar(200), verschieben Sie den Stapel und setzen Sie diesen Kontext in den aktiven Zustand.
5. Nachdem der Aufruf von bar(200) abgeschlossen ist, wird er vom Stapel entfernt und sein Kontext wird zerstört. Die Steuerung wird nun an den fn(10)-Kontext übergeben, der wieder aktiv wird.
6. Zu diesem Zeitpunkt wird fn(10) aufgerufen, vom Stapel entfernt und sein Kontext zerstört. Die Kontrolle wird an den globalen Ausführungskontext übertragen.
Der Ausführungsprozess dieses Codeabschnitts ist zu diesem Zeitpunkt abgeschlossen.
Dann leihen Sie sich das komplette Bild vom Originalautor aus:
Zusammenfassung:
Der Bereich ist nur ein „Rasen“, und der Wert der Variablen muss über den Ausführungskontext erhalten werden, der dem Bereich entspricht. Im gleichen Bereich erzeugen unterschiedliche Aufrufe unterschiedliche Ausführungskontexte und damit unterschiedliche Variablenwerte. Daher wird der Wert der Variablen im Gültigkeitsbereich während der Ausführung bestimmt, der Gültigkeitsbereich jedoch, wenn die Funktion erstellt wird. Wenn Sie also den Wert einer Variablen in einem Bereich ermitteln möchten, müssen Sie den diesem Bereich entsprechenden Ausführungskontext und dann den Wert der darin enthaltenen Variablen ermitteln.