Heim Web-Frontend js-Tutorial Wann wird eine anonyme Funktion in JavaScript zu einem Abschluss?

Wann wird eine anonyme Funktion in JavaScript zu einem Abschluss?

Oct 31, 2024 am 08:05 AM

When Does an Anonymous Function Become a Closure in JavaScript?

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 &lt; 10; i++) {
    (function(){
        var i2 = i;
        setTimeout(function(){
            console.log(i2);
        }, 1000)
    })();
}</code>
Nach dem Login kopieren

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 &lt; 10; i++) {
    setTimeout((function(i2){
        return function() {
            console.log(i2);
        }
    })(i), 1000);
}</code>
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

JQuery überprüfen, ob das Datum gültig ist JQuery überprüfen, ob das Datum gültig ist Mar 01, 2025 am 08:51 AM

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

JQuery Get Element Polsterung/Rand JQuery Get Element Polsterung/Rand Mar 01, 2025 am 08:53 AM

JQuery Get Element Polsterung/Rand

10 lohnt 10 lohnt Mar 01, 2025 am 01:29 AM

10 lohnt

10 JQuery Accords Registerkarten 10 JQuery Accords Registerkarten Mar 01, 2025 am 01:34 AM

10 JQuery Accords Registerkarten

HTTP-Debugging mit Knoten und HTTP-Konsole HTTP-Debugging mit Knoten und HTTP-Konsole Mar 01, 2025 am 01:37 AM

HTTP-Debugging mit Knoten und HTTP-Konsole

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

JQuery fügen Sie Scrollbar zu Div hinzu JQuery fügen Sie Scrollbar zu Div hinzu Mar 01, 2025 am 01:30 AM

JQuery fügen Sie Scrollbar zu Div hinzu

See all articles