Heim > Artikel > Web-Frontend > JavaScript-Bereichskette und Ausführungsumgebung
Die Konzepte von Umfang, Umfangskette, Ausführungsumgebung und Stapel sind in JavaScript sehr wichtig. Lassen Sie uns sie hier klären > Der Bereich innerhalb der lokalen Bereichsfunktion, der globale Bereich ist Fenster
Globale Variablen können als Attribute des Fensterobjekts verwendet werden, sie sind gleich
<script type="text/javascript"> function test1(){ a = 1;//全局变量,只有在当前函数运行时,才有效 } test1(); console.log(a);//1 注意test1函数必须运行,不然找不到a </script>
Alle Attribute des Fensterobjekts haben einen globalen Gültigkeitsbereich und können überall im Code aufgerufen werden.
<script type="text/javascript"> var b = 1;//全局变量 console.log(b === window.b); //true 全局变量可以当做window对象的属性用,他们是一样的; </script>Variablen, die innerhalb der Funktion deklariert werden, sind lokale Variablen und können nur innerhalb des Funktionskörpers verwendet werden Verwenden Sie var, es handelt sich immer noch um lokale Variablen.
Die Bereichskette hängt von der Position ab, an der die Funktion deklariert wird. Beim Parsen beginnt sie mit dem aktuellen Bereich Kann im aktuellen Bereich nicht gefunden werden, sucht die Engine weiter im äußeren verschachtelten Bereich, bis sie die Variable findet oder den äußersten Bereich (d. h. den globalen Bereich) erreicht.
Die Route wurde bestimmt und hat nichts damit zu tun, wo die Funktion ausgeführt wird<script type="text/javascript"> var c = 1;//全局变量// console.log(d);//ReferenceError: d is not defined 引用错误,当前作用域就是最外层作用域,依然找不到d function test2(d){ console.log(c); //1 全局变量,哪都可以访问;(先找当前作用域,找不到,就向外层作用域找,直到window最外层,找到了) console.log(d);//3 形参是局部变量,只有当前作用域下可以访问 } test2(3); </script>Bezeichner mit demselben Namen können in mehrstufigen verschachtelten Bereichen definiert werden, was als „Schatteneffekt“ bezeichnet wird. , der interne Bezeichner „schattet“ den externen Bezeichner
Durch die window.a-Technologie können Sie auf globale Variablen zugreifen, die von Variablen mit demselben Namen verdeckt werden. Wenn jedoch nicht-globale Variablen verdeckt sind, kann auf sie trotzdem nicht zugegriffen werden.
<script type="text/javascript"> var a = 1; var b = 2; var c = 3; var d = 4; function inner(d) {//它的作用域链是inner---全局 var c = 8; console.log(a);//1 当前作用域找不到a,去全局作用域找到了a=1 console.log(b);//2 当前作用域找不到b,去全局作用域找到了b=2 console.log(c);//8 当前作用域找到了c=8 console.log(d);//7 当前作用域找到了d=7,形参也是局部作用域 // console.log(e);//ReferenceError: e is not defined 引用错误,找不到e, 它的作用域链是inner---全局 console.log(a+b+c+d);//18 } function outter(e) { var a = 5;//inner()的作用域链是inner---全局,所以这个a相当于无效 var b = 6;//inner()的作用域链是inner---全局,所以这个a相当于无效 inner(7); } outter(999);//这个999无效,里面的e根本找不到 </script>
Objekt
), das alle Variablen und Daten speichert, auf die die Funktion zugreifen kann (d. h. alle Daten und Variablen in der Bereichskette der Funktion). Unser Code kann nicht darauf zugreifen, er wird von der Engine verwendet.<script type="text/javascript"> var a = 'Lily'; var b = 'Lucy'; function outer() { var b = 'Jesica'; var c = 'Susan'; function inner(c) { console.log(a);//Lily console.log(window.b);//Lucy console.log(b);//Jesica console.log(c);//Jenifer } inner('Jenifer'); } outer(); </script>
Wenn eine Funktion ausgeführt wird, wird die Ausführungsumgebung der Funktion an die Spitze des Umgebungsstapels verschoben, wobei die vorherige Ausführungsumgebung hinten liegt.
Führen Sie Zeile 20 aus, rufen Sie die Funktion „outer“ (999) auf, geben Sie dann die Umgebung zur Ausführung der Funktion „outer“ (999) ein, deklarieren Sie die Heraufstufung und übergeben Sie den tatsächlichen Parameter 999 an den formalen Parameter e Zwei Ausführungsumgebungen, äußere(999) ist die aktuelle Ausführungsumgebung;
führt Zeile 16 aus, weist dann b=6 in Zeile 17 zu;
Zeile 7 ausführen, c=8 zuweisen; dann ausführen und ausgeben;
Codeoptimierung
Das obige ist der detaillierte Inhalt vonJavaScript-Bereichskette und Ausführungsumgebung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!