Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung von Umfang + Abschluss in Javascript

Detaillierte Erklärung von Umfang + Abschluss in Javascript

php是最好的语言
php是最好的语言Original
2018-08-04 10:45:072521Durchsuche

Geltungsbereich:

[[Geltungsbereich]]:Jede Javascript-Funktion ist ein Objekt, und das Objekt enthält einige Attribute dass wir darauf zugreifen können, auf einige 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 Scope nennen, der eine Sammlung von Laufzeitkontexten speichert. Laufzeitkontext: Wenn eine Funktion ausgeführt wird, wird ein internes Objekt namens Ausführungskontext erstellt, der die Umgebung definiert, in der eine Funktion ausgeführt wird. Der entsprechende Ausführungskontext ist also bei jeder Ausführung der Funktion eindeutig führt zur Erstellung mehrerer Ausführungskontexte. Wenn die Funktion die Ausführung abschließt, wird der von ihr generierte Ausführungskontext zerstört.

Bereichskette: Eine Sammlung von Ausführungskontextobjekten, die in [[Bereich]] gespeichert sind. Diese Sammlung ist in einer Kette verbunden. Wir nennen dieses Kettenglied einen Bereich.

function a(){
    function b(){
        function c(){
        }
    }    

}

a definiert a.[[scope]] ===> 0: GO

a doing a.[[scope]] ===> 0: aAO

                                                                                                    1: GO

b definiert b.[[scope]] ===> 0: bAO

                    1: aAO

                         ​ ​ 2:GO

c definiert c.[[scope]] ===> 0 : bAO

                                                                   

c definiert c.[[scope]] ===> cAO

                                              1 :bAO

                                                                                                                  🎜>

Abschluss

Wenn die interne Funktion gespeichert wird Außerhalb wird ein Schließungspaket generiert, das den ursprünglichen Umfang verursacht Die Kette kann nicht freigegeben werden, was zu Speicherverlusten führt.

function a(){
    function b(){
        var bbb = 234;
           console.log(aaa);
    }
    var aaa = 123;
    return b;
}
var glob = 100;
var demo = a();
demo();

Eine Funktion gibt die B-Funktion zurück, bevor sie zerstört wird, sodass die von der B-Funktion generierte Bereichskette nicht zerstört wird und die B-Funktion zu diesem Zeitpunkt nicht ausgeführt wird .log(aaa) wird unten aufgerufen. Wenn die b-Funktion ausgeführt wird, gibt es in bAO keine Variable aaa, daher kehrt es zum übergeordneten aAO zurück und findet aaa = 123, sodass das Ergebnis 123 ist.

Dann , wie kann man die b-Funktion vor der Rückkehr ausführen lassen?

Einführung der

Sofortausführungsfunktion

Detaillierte Erklärung von Umfang + Abschluss in Javascript

Sofortausführungsfunktion für die Funktion der Initialisierungsfunktion,

1 (function(){}() ); (w3c empfiehlt die erste)

2. (function(){})();

Nur ​​Ausdrücke können symbolisch ausgeführt werden

Symbolisch sofort ausgeführt Funktionsausdruck, die Funktion kann nicht erneut verwendet werden

Die Funktion kann durch Pluszeichen, Minuszeichen usw. in einen Funktionsausdruck umgewandelt werden.

+/-/! function test(){

console.log('a');

}

function test(){
    var arr = [];
    for(var i = 0;i < 10;i ++){
        (function (j){
            arr[j] = function(){
                document.write(j+&#39; &#39;);    
            }
        }(i));
    }
    return arr;
	}
	var myarr = test();
	for(var i = 0;i < 10;i ++){
   	     myarr[i]();
    }

Das Ausgabeergebnis ist: 1 2 3 4 5 6 7 8 9

Verwandte Artikel:

Detaillierte Erläuterung von JavaScript-Bereichen und -Abschlüssen

Bereichsketten und -Abschlüsse in JavaScript

Ähnliche Videos:

JS Advanced Scope – Yan Shiba Javascript Advanced Video Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Umfang + Abschluss in Javascript. 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