Heim > Artikel > Web-Frontend > Ausführliche Erläuterung der var-Deklarationsmethoden und Beispiele für den Variablenbereich in JavaScript
Wenn Sie diese „implizite“ Deklaration im aktuellen Kontext vornehmen, sucht die JavaScript-Engine zunächst im aktuellen Kontext, um zu sehen, ob diese Variable bereits zuvor deklariert wurde. Wenn nicht, gehen Sie zum vorherigen Kontext, um danach zu suchen. Wenn es nicht gefunden wurde, wird diese Variable schließlich im Fenster deklariert!
window. y = "hello"; function func(){ y = "OH, NO!!!"; } func(); alert(window.y); //#=> display "OH, NO!!!"
Wenn eine Ebene im Kontext eine solche „implizit“ definierte Variable hat, wird die Variable in dieser Ebene geändert, ohne dass eine neue Variable im Fenster generiert wird.
var x = "window.x"; function a() { var x = "a's x"; var b = function() { var c = function() { //no var! x = "c's x:"; }; alert("before c run,the b.x:" + x); c(); alert("after c run, the b.x:" + x); }; alert("a.x is:" + x); b(); alert("after b function runed, the a.x is:" + x); }; alert("before a run, window.x:" + x); a(); alert("after a run, window.x:" + x);
Gedanken, die durch eine Frage ausgelöst werden
1. Zweifel, die durch einen Code verursacht werden
for(var i=0;i<3;i++) { console.log(j+","+k); for(var j=0;j<3;j++) { var k = j+1; } } console.log(i);
Ausgabeergebnis:
undefined,undefined 3,3 3,3 3
Wenn Sie sich mit Sprachen wie C und Java beschäftigen, können Sie dies tun Seien Sie verwirrt. Warum kann auf lokale Variablen wie j und k von Code außerhalb des Gültigkeitsbereichs zugegriffen werden?
Wenn eine mit var in JavaScript deklarierte Variable als lokale Variable betrachtet werden kann, ist der Bereich, der auf die Variable zugreifen kann, der lokale Bereich der Variablen. Wie im obigen Beispiel gibt es in der Zeile console.log immer noch die Bereiche von j und k, und außerhalb der Schleife gibt es immer noch den Bereich von i. An dieser Stelle kann ich vielleicht willkürlich sagen, dass JavaScript keinen wirklichen lokalen Geltungsbereich hat. Wirklich? NEIN!
2. Wie erhält man den tatsächlichen lokalen Umfang? Eine Schreibmethode hat meine Aufmerksamkeit erregt
Möglicherweise haben Sie den Quellcode von JQuery oder den Quellcode von Ext gesehen und sind möglicherweise mit der folgenden Schreibmethode ein wenig vertraut.
var a = 3,b=4; var exports = (function() { var a = 1,b=2; return {a:a,b:b}; })(); console.log(""+a+","+b); console.log(exports.a+","+exports.b);
Ausgabeergebnis:
3,4 1,2
Es ist eine sehr magische Entdeckung (eigentlich ist es nicht magisch, jeder weiß es), es gibt einen unabhängigen Bereich innerhalb der Funktion, Das heißt, die mit interner Variable deklarierten Funktionsvariablen können nur innerhalb der Funktion verwendet werden. Daher schreibt jeder Master in jedem Framework auf diese Weise, um Konflikte zwischen lokalen Variablen und externen Variablen (äußere lokale Variablen und globale Variablen) zu verhindern.
An dieser Stelle ziehe ich die willkürliche Schlussfolgerung im ersten Artikel zurück und ändere sie:
JavaScript ist durch Funktionen begrenzt und jede Funktion hat einen lokalen Gültigkeitsbereich für jeden anderen Block (einschließlich gewöhnlicher Codeblöcke, for-Schleifen, If). , while und andere Codeblöcke) haben keinen lokalen Gültigkeitsbereich. Mit var deklarierte Variablen können diese Codeblöcke direkt durchlaufen und von externem Code aufgerufen werden.
3. Wann wird ein Fehler gemeldet und wann ist er undefiniert? var-Deklarationsmechanismus
Sehen Sie sich den Code an:
console.log(a)
ReferenceError: a is not defined
undefined
var exports = (function() { var a = 1,b=2; return {a:a,b:b}; })(); console.log(a);
Ausgabeergebnis:
ReferenceError: a is not defined
Erraten Sie die Schlussfolgerung:
Jedes Mal, wenn die JavaScript-Engine Code ausführt, scannt sie zunächst den gesamten Code im Bereich (der Code innerhalb der Funktion im Bereich wird nicht gescannt) und zeichnet alle von var deklarierten Variablen auf, bevor der Code ausgeführt wird Zur Zuweisung ist der Wert dieser Variablen undefiniert. Wenn Sie danach auf eine Variable zugreifen, greifen Sie zunächst auf die lokale Variable zu. Wenn keine solche lokale Variable vorhanden ist, greifen Sie auf die lokale Variable der oberen Ebene zu (z. B. einen Abschluss), und die obere Ebene erstellt eine Umgebung dafür Schließung), bis auf die vollständige globale Variable zugegriffen wird. Wenn keine solche Variable vorhanden ist, wird eine Ausnahme ausgelöst.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der var-Deklarationsmethoden und Beispiele für den Variablenbereich in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!