Der Verschlussmechanismus ist der Schwerpunkt und die Schwierigkeit von JavaScript. Dieser Artikel soll jedem helfen, Schließungen leicht zu erlernen. Werfen wir einen Blick darauf mit dem Editor unten
Zusammenfassung
Der Abschlussmechanismus ist der Schwerpunkt und die Schwierigkeit von Javascript. Dieser Artikel soll jedem helfen, Abschlüsse leicht zu lernen
1. Was ist Schließung?
Ein Abschluss ist eine Funktion, die auf Variablen im Rahmen einer anderen Funktion zugreifen kann.
Im Folgenden werden gängige Methoden zur Schließungsimplementierung aufgeführt und das Konzept der Schließung anhand von Beispielen erläutert
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
f1 ist die übergeordnete Funktion von f2 und f2 wird einer globalen Variablen (Rückgabewert) zugewiesen. Dies führt dazu, dass sich f2 immer im Speicher befindet und die Existenz von f2 von f1 abhängt. Daher befindet sich f1 immer im Speicher und wird nach Abschluss des Aufrufs nicht vom Speicherbereinigungsmechanismus (Garbage Collection) recycelt, der einen Abschluss bildet.
Es kann also so verstanden werden. Der Abschlussmechanismus besteht darin, dass, wenn Funktion A auf eine Variable einer anderen Funktion B verweist, A jedoch nach der Rückkehr von B immer noch nicht zurückkehrt, aufgrund der Referenz von A immer noch alle von B vorhanden sind Lokale Variablen werden nicht abgemeldet, wenn B beendet, und bleiben bestehen, bis A sich abmeldet. Zu diesem Zeitpunkt ist A der Abschluss.
2. Der This-Zeiger des Verschlusses
Verschlüsse werden normalerweise in der globalen Umgebung aufgerufen, daher zeigt dieser normalerweise auf das Fenster, das wird in bestimmten Situationen immer noch benötigt. Kurz gesagt, dies weist auf die Ausführungsumgebung hin. Wenn das This des Abschlusses auf das enthaltende3. Bei der Verwendung von Verschlüssen zu beachtende Punkte
zu löschen, bevor die Funktion beendet wird.
Objekt), den Abschluss als öffentliche Methode (Öffentliche Methode) und die internen Variablen als private Eigenschaften (privater Wert) verwenden, , müssen Sie darauf achten, den Wert der internen Variablen der übergeordneten Funktion nicht zufällig zu ändern.
Lösen Sie eine häufige Abschlussfrage im Vorstellungsgespräch
Frage:
function onMyLoad(){ /* 抛出问题: 此题的目的是想每次点击对应目标时弹出对应的数字下标 0~4,但实际是无论点击哪个目标都会弹出数字5 问题所在: arr 中的每一项的 onclick 均为一个函数实例(Function 对象),这个函数实例也产生了一个闭包域, 这个闭包域引用了外部闭包域的变量,其 function scope 的 closure 对象有个名为 i 的引用, 外部闭包域的私有变量内容发生变化,内部闭包域得到的值自然会发生改变 */ var arr = document.getElementsByTagName("p"); for(var i = 0; i < arr.length;i++){ arr[i].onclick = function(){ alert(i); } } }
Lösung
1. Fügen Sie außen eine Funktionsebene hinzu und übergeben Sie i alsfor(var i = 0; i<arr.length;i++){ arr[i].onclick = (function(arg){ return function () { alert(arg); } })(i); }
Das obige ist der detaillierte Inhalt vonEinfaches Verständnis von JavaScript-Abschlüssen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!