Js-Abschluss
Wissenswertes vor der Schließung
1. Funktionsumfang
(1) Das Besondere an Js Sprache ist, dass globale Variablen direkt innerhalb der Funktion
Wenn in PHP
(2). Lokale Variablen innerhalb der Funktion können nicht außerhalb der Funktion gelesen werden
Beachten Sie, dass var hinzugefügt werden muss, wenn Variablen innerhalb einer Funktion deklariert werden, andernfalls wird eine globale Variable deklariert
//Natürlich gilt das in PHP noch mehr,
Manchmal müssen Sie, wenn Sie die lokalen Variablen innerhalb der Funktion abrufen müssen, die Eigenschaften des js-Variablenbereichs auf flexible Weise nutzen, z. B. indem Sie eine Unterfunktion innerhalb der Funktion definieren Die übergeordnete Funktion ist global und die untergeordneten Funktionen können auf Variablen in der übergeordneten Funktion zugreifen (die lokale Variablen für den gesamten JS-Code sind)
Alle lokalen Variablen innerhalb von Parent sind für seine untergeordneten Funktionen sichtbar, aber lokale Variablen innerhalb seiner untergeordneten Funktionen sind für seine übergeordnete Funktion nicht sichtbar. Dies ist die einzigartige Kettenbereichsstruktur von js. Untergeordnete Objekte durchsuchen alle Variablen des übergeordneten Elements Alle Variablen des übergeordneten Objekts sind für die untergeordneten Objekte sichtbar, und das Gegenteil ist nicht der Fall! Die obige Sohnfunktion ist ein Abschluss
Manchen Schülern geht es vielleicht so
Beachten Sie, dass in JavaScript in Funktionen deklarierte Funktionen lokal sind und freigegeben werden, nachdem die Ausführung der Funktion abgeschlossen ist
Beachten Sie den Unterschied zwischen diesem und PHP
Schließung
Definieren Sie die Funktion innerhalb der Funktion, die Brücke, die das Innere und Äußere der Funktion verbindet
Der Verschluss hat zwei Funktionen:
Eine davon ist das zuvor erwähnte Lesen von Variablen innerhalb der Funktion,
Die zweite besteht darin, die Werte dieser Variablen im Speicher zu speichern, um einen Datenaustausch zu erreichen
Hier ein paar Beispiele für Verschlüsse
Das Ausführungsergebnis der anonymen Funktion (dh die Deklaration der inneren Unterfunktion wird der globalen Variablen cut zugewiesen) wird im Speicher gespeichert
Beim Ausführen von cut() wird der Wert direkt aus dem Speicher abgerufen. Nur die Funktion cnt() kann i aufrufen, und direktes Alert(i) funktioniert nicht
Sie können auch Parameter in den Abschluss
Um Schließungen besser zu verstehen, schauen wir uns den folgenden Code an
Zum Beispiel möchte ich ein Array zurückgeben. Es gibt 5 Funktionen im Array. Die erste Funktion erscheint 0, die zweite erscheint 1 ...
Wenn der Code so geschrieben ist
Popup-Funktionskörper
function(){return i;} }
Das letzte i ist 4 und dann wird es 5
Für Schleifenstopps
Es wurde festgestellt, dass 5 aufgetaucht sind, was offensichtlich nicht unseren Anforderungen entsprach
Lösung 1
Selbst-sofortige Ausführung von Funktionen im Inneren
Aber wir haben festgestellt, dass die Elemente im zurückgegebenen Array das Ergebnis der Funktionsausführung sind, aber was wir wollen, ist, dass die Funktion unseren Code aktualisieren muss
Lösung 2
Abschlussimplementierung
arr=(function(num){
Rückgabefunktion(){return num;}
})(i);
}
Rückkehr arr;
}
var arr=box();
for(var i=0;i<5;i ){
alarm(arr());//0,1,2,3,4
}
Schlüsselcode
Wenn i=0
arr[0]=(function(num){return function(){return num;}})(0);
1 Uhr
arr[1]=(function(num){return function(){return num;}})(1);