Heim  >  Artikel  >  Web-Frontend  >  Zusammenfassung der grundlegenden JavaScript-Kenntnisse (9) Hervorragende Erklärung des Bereichs und der Bereichskette

Zusammenfassung der grundlegenden JavaScript-Kenntnisse (9) Hervorragende Erklärung des Bereichs und der Bereichskette

php中世界最好的语言
php中世界最好的语言Original
2018-03-10 13:36:321334Durchsuche

Dieses Mal bringe ich Ihnen eine Zusammenfassung der Grundkenntnisse von JavaScript. Es gibt insgesamt elf Wissenspunkte. Umfang und Umfangskette. Werfen wir einen Blick darauf.

Ausarbeitung des Geltungsbereichs

[[Geltungsbereich]]: Jede JavaScript-Funktion ist ein Objekt. Es gibt einige Eigenschaften im Objekt, auf die wir zugreifen können, auf andere jedoch nicht. Diese Eigenschaften sind nur für die JavaScript-Engine zugänglich, und [[scope]] ist eine davon.

[[scope]] bezieht sich auf das, was wir einen Bereich nennen, der eine Sammlung von Laufzeitkontexten speichert.

Scope-Kette: Der in [[scope]] gespeicherte Ausführungskontext. Eine Sammlung von Objekten. Diese Sammlung ist in einer Kette verknüpft. Wir nennen dieses Kettenglied eine Bereichskette

Laufzeitkontext: Wenn eine Funktion ausgeführt wird, wird ein internes sogenanntes Ausführungsobjekt erstellt. Ein Ausführungskontext definiert die Umgebung, in der eine Funktion ausgeführt wird. Der entsprechende Ausführungskontext ist bei jeder Ausführung einer Funktion eindeutig. Daher führt der mehrmalige Aufruf einer Funktion zur Erstellung mehrerer Ausführungskontexte Ausführungskontext wird zerstört

Suchvariablen: Suche von oben in der Bereichskette nach unten

function a() {    function b(){        var b = 234;
    }    
    var a = 123;
    b();
}var glob = 100;
a();

Schauen wir uns zunächst die obige Funktion an. Dies ist eine Gesamtfunktion Im globalen Bereich gibt es unten die Variable glob, und dann gibt es die Ausführung von a; Schritt 1: Was das System zunächst sieht, muss die Definition von a sein. Es gibt diesen [[Umfang]] .

a
/
[[scope]]    
scope指向scope chain
scope chain
scope指向这里


0 Die 0 an dieser Position zeigt auf GO


Globales Objekt

0 zeigt auf Die Tabelle ist

this    window    
window    (object)    
document    (object)    
a    (function)    
glob    100    
[[scope]]里面有这个全局的执行期上下文,然后a被执行了,a被执行,a产生的这个AO,把自己的AO存到作用域链的最顶端,形成一个新的作用域链,现在的a的[[scope]]和刚才的那个[[scope]]不一样了
a
/
[[scope]]
scope指向scope chain
scope chain
scope指向这里


0 Die 0 an dieser Position zeigt auf AO

1 Die 0 an dieser Position zeigt auf GO


Aktivierungsobjekt

0 Punkte auf diese Tabelle

1 Punkte auf diese Tabelle
this    window    
arguents    []    
a    123    
b    (function)    
Global Object

Der einzige Unterschied besteht darin, dass der darin gespeicherte Wert immer noch derselbe ist greifen auf den [[Bereich]] von a zu, der aus dem [[Bereich] von a“ stammt. Diese Bibliothek speichert eine Bereichskette mit verschiedenen darin hängenden Variablen Dabei suche ich von oben nach unten.
this    window    
window    (object)    
document    (object)    
a    (function)    
glob    100

Dann führt die Ausführung von a dazu, dass b definiert wird, nachdem b ausgeführt wurde. Wenn b definiert ist, gibt es einen natürlichen [[Bereich]], und es gibt einen in [[Bereich ]]. Es sollte eine Bereichskette haben, aber die Bereichskette unterscheidet sich von der von a. Wenn a definiert ist, befindet es sich im globalen Bereich und die einzigen Attribute, auf die zugegriffen werden kann, sind sein eigenes AO und das globale GO . Aber b ist in einer Funktion definiert, sodass der [[Bereich]] von b nicht nur auf seinen eigenen AO zugreifen kann, sondern auch auf den AO von a, und der globale GO

Bereich zeigt auf die Bereichskette
b
/
[[scope]]


Scope-Kette

Scope-Punkte hier


0 Die 0 an dieser Position zeigt auf sich selbst

1 Die 1 an dieser Position zeigt auf den AO eines

2 Die 0 an dieser Position zeigt auf GO


Aktivierungsobjekt

0 Punkte auf diese Tabelle

1 Punkte auf diese Tabelle
this    window    
arguents    []    
b    234;    
Activation  Object

1 Punkte auf diese Tabelle
this    window    
arguents    []    
a    123    
b    (function)    
Global Object

Scope Destroy
this    window    
window    (object)    
document    (object)    
a    (function)    
glob    100

Nachdem b ausgeführt wurde, wird sein eigenes ao zerstört, in den Definitionszustand zurückgekehrt und auf die nächste Ausführung gewartet

Da b der letzte Satz der Funktion a ist, also nach der Ausführung von b, a wird ebenfalls zerstört, sodass der [[Bereich]] von b ebenfalls zerstört wird, in den Definitionszustand zurückkehrt und auf die nächste Ausführung wartet

, sodass die externe Funktion nicht auf interne Funktion
//例子function a() {    function b() {        function c(){
            
        }
        c();
    }
    b();
}
a();
a defined a.[[scope]] --> 0:GOa doing   a.[[scope]] --> 0:a的AO
                          1:GO
                          b defined b.[[scope]] --> 0:a的AO
                          1:GOb doing   b.[[scope]] --> 0:自己的AO
                          1:a的AO 
                          2:GO
                          c defined c.[[scope]] --> 0:a的AO
                          1:c的AO 
                          2:GOc doing   c.[[scope]] --> 0:自己的AO
                          1:b的AO
                          2:a的AO
                          3:GO
Attribute und Werte

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

Zusammenfassung der grundlegenden JavaScript-Kenntnisse (6) Funktionen, anfänglicher Umfang (Teil 2)


Grundlagen Zusammenfassung der JavaScript-Kenntnisse (7) Rekursion


Zusammenfassung der grundlegenden JavaScript-Kenntnisse (8) Ausführungsprozess vor der Kompilierung

Das obige ist der detaillierte Inhalt vonZusammenfassung der grundlegenden JavaScript-Kenntnisse (9) Hervorragende Erklärung des Bereichs und der Bereichskette. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn