JavaScript-Abschlüsse im Vergleich zu anonymen Funktionen
Anonyme Funktionen, ein häufiges Merkmal in JavaScript, tauchen häufig in Diskussionen über Abschlüsse auf. Allerdings qualifizieren sich nicht alle anonymen Funktionen als echte Abschlüsse.
Abschlüsse definieren
Ein Abschluss in JavaScript ist eine spezielle Art anonymer Funktion, die den Zugriff auf den lexikalischen Bereich in behält in dem es erstellt wurde, auch nachdem der äußere Geltungsbereich beendet ist. Mit dieser Funktion können Abschlüsse die Werte von Variablen aus dem äußeren Bereich „erfassen“ und so verhindern, dass sie durch Garbage Collection erfasst werden.
Fallstudie: Abschluss über eine Variable
In In den angegebenen Codebeispielen verwenden beide Lösungen anonyme Funktionen, um das Drucken der Zählervariablen i zu verzögern.
Versuch eines Freundes
Der Code im ersten Beispiel scheint das zu erfassen i-Variable innerhalb des Abschlusses. Es erfüllt jedoch nicht die Definition eines Abschlusses, da die innere anonyme Funktion g nicht den lexikalischen Bereich der äußeren Funktion f erbt. Somit ist i nicht wirklich „geschlossen“.
<code class="javascript">for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); }</code>
Versuch des Herausgebers
Das zweite Codebeispiel erstellt tatsächlich einen Abschluss. Die von der äußeren Funktion f zurückgegebene anonyme Funktion erfasst die i2-Variable und behält ihren Wert innerhalb des lexikalischen Bereichs des Abschlusses bei. Dieser Abschluss wird dann innerhalb des setTimeout-Rückrufs aufgerufen, um sicherzustellen, dass auf den ursprünglichen Wert der i-Variablen zugegriffen wird.
<code class="javascript">for(var i = 0; i < 10; i++) { setTimeout((function(i2){ return function() { console.log(i2); } })(i), 1000); }</code>
Fazit
Im bereitgestellten Code die Lösung des Herausgebers demonstriert die korrekte Verwendung eines Abschlusses zum Erfassen des Werts der i-Variablen. Während beide Lösungen das Problem des verzögerten Druckens effektiv lösen, gilt nur die Lösung des Herausgebers als Abschluss im technischen Sinne.
Das obige ist der detaillierte Inhalt vonWann wird eine anonyme Funktion in JavaScript zu einem Abschluss?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!