Dieses Mal werde ich Ihnen die Verwendung von JS-Verschlüssen vorstellen. Was sind die Vorsichtsmaßnahmen bei der Verwendung von JS-Verschlüssen?
Schließung ist eine Schwierigkeit der Javascript-Sprache, und es ist auch ihre Funktion. Viele fortgeschrittene Anwendungen basieren auf Schließungen.
Das Folgende sind meine Lernnotizen, die für Javascript-Anfänger sehr nützlich sein dürften.
Um Abschlüsse zu verstehen, müssen Sie zunächst den speziellen Variablenumfang von Javascript verstehen.
Der Umfang von Variablen besteht lediglich aus zwei Typen: globale Variablen und lokale Variablen.
Das Besondere an der Javascript-Sprache ist, dass globale Variablen direkt innerhalb der Funktion gelesen werden können.
var n=999;
function f1(){
warning(n);
}f1(); // 999
Andererseits können lokale Variablen innerhalb einer Funktion nicht außerhalb der Funktion gelesen werden.
function f1(){
var n=999;
}warning(n); // Fehler
hier Beachten Sie, dass Sie beim Deklarieren von Variablen innerhalb einer Funktion den Befehl var verwenden müssen. Wenn Sie es nicht verwenden, deklarieren Sie tatsächlich eine globale Variable!
2. Wie liest man lokale Variablen von außen? Aus verschiedenen Gründen müssen wir manchmal lokale Variablen innerhalb einer Funktion abrufen. Dies ist jedoch, wie bereits erwähnt, im Normalfall nicht möglich und kann nur durch Workarounds erreicht werden. Das heißt, innerhalb der Funktionfunction f1(){
n=999;
}f1();
warning(n); 🎜>
definieren Sie eine Funktion .
function f1(){ var n=999; function f2(){Im obigen Code ist die Funktion f2 in der Funktion f1 enthalten. Zu diesem Zeitpunkt sind alle lokalen Variablen in f1 für f2 sichtbar. Aber das Gegenteil funktioniert nicht. Die lokalen Variablen in f2 sind für f1 unsichtbar. Dies ist die für die Javascript-Sprache einzigartige „Kettenbereichsstruktur“. Das untergeordnete Objekt sucht Ebene für Ebene nach den Variablen aller übergeordneten Objekte. Daher sind alle Variablen des übergeordneten Objekts für das untergeordnete Objekt sichtbar, umgekehrt jedoch nicht. Da f2 die lokalen Variablen in f1 lesen kann, können wir dann nicht seine internen Variablen außerhalb von f1 lesen, solange f2 als Rückgabewert verwendet wird?warning(n); // 999
}
}
function f1(){ var n=999; function f2(){Die f2-Funktion im Code im vorherigen Abschnitt ist ein Abschluss. Die Definition von „Abschluss“ in diverser Fachliteratur ist sehr abstrakt und schwer verständlich. Nach meinem Verständnis ist ein Abschluss eine Funktion, die die internen Variablen anderer Funktionen lesen kann. Da in der Javascript-Sprache nur Unterfunktionen innerhalb der Funktion lokale Variablen lesen können, können Abschlüsse einfach als „innerhalb einer Funktion definierte Funktionen“ verstanden werden. Im Wesentlichen ist der Abschluss also eine Brücke, die das Innere der Funktion mit der Außenseite der Funktion verbindet. 4. Verwendungsmöglichkeiten von Verschlüssen Verschlüsse können an vielen Stellen eingesetzt werden. Es hat zwei Hauptverwendungszwecke: Zum einen werden die Variablen innerhalb der Funktion gelesen, zum anderen werden die Werte dieser Variablen im Speicher gehalten. Wie ist dieser Satz zu verstehen? Bitte schauen Sie sich den Code unten an.warning(n); >
} var result=f1(); result(); // 999
Return f2;drei , Das Konzept des Abschlusses
Funktion f1(){
var n=999;
nAdd=function(){n+=1}
Funktion f2(){
alert(n);
}return f2;
}
var result=f1(); // 999
nAdd ();
result(); // 1000
In diesem Code ist result eigentlich die Abschlussfunktion f2. Es wurde zweimal ausgeführt, das erste Mal war der Wert 999, das zweite Mal war der Wert 1000. Dies beweist, dass die lokale Variable n in der Funktion f1 immer im Speicher gespeichert ist und nach dem Aufruf von f1 nicht automatisch gelöscht wird.
Warum passiert das? Der Grund dafür ist, dass f1 die übergeordnete Funktion von f2 ist und f2 einer globalen Variablen zugewiesen ist, wodurch f2 immer im Speicher bleibt und die Existenz von f2 von f1 abhängt, sodass f1 immer im Speicher ist und nicht gelöscht wird Nach Abschluss des Anrufs wird es vom Garbage-Collection-Mechanismus recycelt.
Eine weitere erwähnenswerte Sache in diesem Code ist die Zeile „nAdd=function(){n+=1}“. Erstens wird das Schlüsselwort var nicht vor nAdd verwendet, daher ist nAdd eher eine globale Variable als lokale Variablen. Zweitens ist der Wert von nAdd eine
anonyme Funktion(anonyme Funktion), und diese anonyme Funktion selbst ist auch ein Abschluss, sodass nAdd einem Setter entspricht, der lokale Variablen innerhalb der Funktion außerhalb von operieren kann Funktion. 5. Zu beachtende Punkte bei der Verwendung von Abschlüssen
1) Da Abschlüsse dazu führen, dass die Variablen in der Funktion im Speicher gespeichert werden, was viel Speicher verbraucht, können Abschlüsse andernfalls nicht missbraucht werden Dies führt zu Leistungsproblemen auf Webseiten und kann zu Speicherverlusten im IE führen. Die Lösung besteht darin, alle nicht verwendeten lokalen Variablen zu
zu löschen, bevor die Funktion beendet wird. 2) Der Abschluss ändert den Wert der Variablen innerhalb der übergeordneten Funktion außerhalb der übergeordneten Funktion. Wenn Sie also die übergeordnete Funktion als Objekt (
object), den Abschluss als öffentliche Methode (Public Method) und die internen Variablen als private Eigenschaft (privater Wert) verwenden, sollten Sie dies nicht tun Ändern Sie die Werte von Variablen innerhalb der übergeordneten Funktion beiläufig. 6. Fragen zum Nachdenken
Wenn Sie die Ergebnisse der folgenden beiden Codeteile verstehen können, sollten Sie den Funktionsmechanismus von Schließungen verstehen.
Codeausschnitt 1.
var name = "The Window";var object = {
name : "My Object",return function(){
getNameFunc : function(){return this.name;
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben, bitte Achten Sie auf andere verwandte Artikel auf der chinesischen PHP-Website! Codeausschnitt 2.
);Empfohlene Lektüre:
So verwenden Sie JavaScript-Strings
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()());
So implementieren Sie die bidirektionale Bindung von Daten im WeChat-Applet-Set
Das obige ist der detaillierte Inhalt vonVerwendung von JS-Verschlüssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!