Der Umfang von JavaScript war schon immer ein Wissenspunkt, der in der Front-End-Entwicklung schwer zu verstehen ist. Denken Sie an ein paar Worte über den Umfang von JavaScript. Sie haben keine Angst, um die Welt zu reisen ...
1. "Kein Umfang auf Blockebene in JavaScript"
In Java oder C#gibt es einen Umfang auf Blockebene, dh auch die Zahnspangen sind auch ein Umfang.
public static void main () {if (1 == 1) {String name = "sieben";} system.out.println (name);} // einen Fehler public static void main () {if (1 == 1) {String name = "sieben";} console.writeline (name);Kein Bereich auf Blockebene in JavaScript
Funktion main () {if (1 == 1) {var name = 'sieben';} console.log (name);} // Ausgabe: sieben2. JavaScript übernimmt den Funktionsumfang
In JavaScript wirkt jede Funktion als Umfang, und Variablen im internen Bereich können nicht extern zugegriffen werden.
Funktion main () {var InnerValue = 'sieben';} main (); console.log (innerValue); // Fehler: Unbefugter ReferenzError: Innervalue ist nicht definiert3. JavaScript -Bereichskette
Da jede Funktion in JavaScript ein Zielfernrohr ist, erscheint bei einer abgewandten Funktion eine Bereichskette.
xo = 'Alex'; Funktion func () {var xo = "sieben"; Funktion inner () {var xo = 'alvin'; console.log (xo);} inner ();} func ();Beispielsweise erscheint der obige Code in der Scope -Kette, die aus drei Scopes besteht. Wenn die Bereichskette angezeigt wird, wird die Bestellung angezeigt, wenn nach Variablen gesucht. Für das obige Beispiel:
Wenn Console.log (XO) ausgeführt wird, besteht die Suchreihenfolge, von innen nach außen nach Priorität der Bereichskette zu suchen. Wenn die innere Schicht nicht vorhanden ist, wird nach und nach nachgeschaut, bis keine Ausnahme gefunden wird.
425762-20160707114743577-37359182.png
4. Die Scope -Kette von Javascript wurde vor der Ausführung erstellt
Der Umfang von JavaScript wurde erstellt, bevor es ausgeführt wird. Wenn es in Zukunft ausgeführt wird, müssen Sie nur nach der Bereichskette suchen.
Beispiel 1:
xo = 'Alex'; Funktion func () {var xo = "sieben"; Funktion inner () {console.log (xo);} return inner;} var ret = func (); ret (); // Ausgabeergebnis: siebenDer obige Code existiert bereits, bevor die Funktion aufgerufen wird:
Globaler Bereich -> Func -Funktionsumfang -> Innere Funktionsumgebung
Bei der Ausführung von [ret ();] wurde die Umfangskette dieser Funktion definiert als: Global Scope -> Func -Funktionsumfang -> innere Funktionsumfang. Bei der Ausführung von [ret ();] werden Variablen basierend auf der vorhandenen Bereichskette gefunden.
Beispiel 2:
xo = 'Alex'; Funktion func () {var xo = "eirc"; function Inner () {console.log (xo);} xo = 'sieben'; return inner;} var ret = func ();Der obige Code hat den gleichen Zweck wie Beispiel 1 und betont auch, dass die Bereichskette bereits vorhanden ist, bevor die Funktion aufgerufen wird:
Globaler Bereich -> Func -Funktionsumfang -> Innere Funktionsumgebung
Bei der Ausführung von [var ret = func ();] wurde der Wert der XO -Variablen im Func -Bereich auf "sieben" von "Eric" zurückgesetzt. Bei der Ausführung von [ret (); später können Sie später nur "sieben" finden.
Beispiel 3:
xo = 'Alex'; Funktion bar () {console.log (xo);} Funktion func () {var xo = "sieben"; Rückgabeleiste;} var ret = func (); ret (); // Ausgabeergebnis: AlexIm obigen Code wurden zwei Zielfernrohrketten erstellt, bevor die Funktion ausgeführt wird:
Globaler Bereich -> Balkenfunktion Umfang
Globaler Bereich -> Func -Funktionsumfang
Bei der Ausführung von [Ret ();] bezieht sich RET auf die Balkenfunktion, und die Umfangskette der Balkenfunktion besteht bereits: Global Teller -> Balkenfunktion Umfang.
5. Erklärung im Voraus
Wenn Sie keine Variablen erstellen und sie direkt in JavaScript verwenden, wird ein Fehler gemeldet:
console.log (xxoo); // error: Uncornt ReferenceError: xxoo ist nicht definiert
Wenn in JavaScript ein Wert erstellt wird, ohne einen Wert zuzuweisen, ist der Wert undefiniert, wie beispielsweise:
var xxoo; console.log (xxoo); // Ausgabe: undefiniert
Wenn dies in der Funktion geschrieben ist:
Funktion foo () {console.log (xo); var xo = 'sieben';} foo (); // Ausgabe: undefiniertDer obige Code meldet keinen Fehler, gibt jedoch undefined aus. Der Grund dafür ist, dass JavaScript -Funktionen, bevor sie ausgeführt werden, alle Variablen in ihnen deklarieren, ohne Werte zuzuweisen. Daher entspricht es dem obigen Beispiel, dass die Funktion Var XO bereits ausgeführt hat, wenn "vorkompiliert" wird. Die Ausgabe des obigen Codes ist also undefiniert.
Das obige ist das, was der Editor Ihnen vorgestellt hat, um den JavaScript -Bereich (Klassiker) in nur fünf Sätzen zu lösen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!