Dieses Mal erkläre ich Ihnen ausführlich, welche Vorsichtsmaßnahmen bei der Verwendung von js-Verschlüssen zu beachten sind. Schauen wir uns die folgenden praktischen Fälle an.
Abschluss ist die Kombination einer Funktion und der lexikalischen Umgebung, in der diese Funktion deklariert wurde >Einfach ausgedrückt: Abschluss = Funktion + Umgebung
Das erste Beispiel für einen Abschluss
function init() { var name = 'Mozilla'; // name is a local variable created by init function displayName() { // displayName() is the inner function, a closure alert(name); // use variable declared in the parent function } displayName(); } init(); because inner functions have access to the variables of outer functions, displayName() can access the variable name declared in the parent function, init().
interne Funktion hat die Berechtigung, die Variablen in der externen Funktion abzurufen.
var data = [ {'key':0}, {'key':1}, {'key':2} ]; function showKey() { for(var i=0;i<data.length;i++) { setTimeout(function(){ //console.log(i); //发现i输出了3次3 //console.log(this); // 发现 this 指向的是 Window data[i].key = data[i].key + 10; console.log(data[i].key) }, 1000); } } showKey();
Kann das obige Beispiel 10 11 12 korrekt ausgeben?
Die Antwort lautet: Nein, und es wird auch einSyntaxfehler gemeldet....
console.log(i); hat festgestellt, dass ich es war Ausgabe 3 mal 3. Mit anderen Worten, nach setTimeout 1000 Millisekunden, wenn die Abschlussfunktion ausgeführt wird, ist diefor-Schleife beendet und i ist ein fester Wert, der nicht den erwarteten Effekt erzielt.
console.log(this); stellte fest, dass dies auf Window verweist, das heißt, die in der Funktion implementierte Abschlussfunktion wurde in eineglobale Funktion konvertiert und im Speicher gespeichert.
Sie müssen also eine andere Ausführungsfunktion definierenvar data = [ {'key':0}, {'key':1}, {'key':2} ]; function showKey() { var f1 = function(n){ data[i].key = data[i].key + 10; console.log(data[i].key) } for(var i=0;i<data.length;i++) { setTimeout(f1(i), 1000); } } showKey(); // 得到预期的 10 11 12
Detaillierte Erläuterung der Verwendung benutzerdefinierter dynamischer Vue-Komponenten
Detaillierte Erläuterung der Schritte zur Verwendung von Time-Sharing Funktionen in js
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von js-Verschlüssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!