Wann wird eine anonyme Funktion in JavaScript zu einem Abschluss?
Oct 31, 2024 am 08:05 AMJavaScript-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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Ersetzen Sie Stringzeichen in JavaScript

JQuery überprüfen, ob das Datum gültig ist

HTTP-Debugging mit Knoten und HTTP-Konsole

Benutzerdefinierte Google -Search -API -Setup -Tutorial

JQuery fügen Sie Scrollbar zu Div hinzu
