Heim > Web-Frontend > js-Tutorial > Hauptteil

Sind anonyme Funktionen in JavaScript immer Abschlüsse?

Susan Sarandon
Freigeben: 2024-11-01 11:02:30
Original
328 Leute haben es durchsucht

Are Anonymous Functions Always Closures in JavaScript?

Abschlüsse im Vergleich zu anonymen Funktionen in JavaScript

JavaScript-Abschlüsse sind für einige Entwickler zu einem Gegenstand der Verwirrung geworden. Während alle JavaScript-Funktionen Abschlüsse sind, ist eine bestimmte Teilmenge von besonderem theoretischen Interesse. Ziel dieses Artikels ist es, das Konzept zu klären und zu bestimmen, welcher der beiden Codeblöcke genau Schließungen verwendet.

Abschlüsse verstehen:

Ein Abschluss ist eine Funktion, die den Zugriff auf erfasst und aufrechterhält Variablen aus dem umschließenden Bereich, auch wenn dieser Bereich nicht mehr aktiv ist. Im Wesentlichen ist ein Abschluss eine Funktion, die über einen Speicher verfügt und auf Daten aus ihrem übergeordneten Bereich zugreifen kann, die als „Variablen des übergeordneten Bereichs“ oder „Upvalues“ bezeichnet werden.

Abschlüsse identifizieren:

Um festzustellen, ob eine Funktion ein Abschluss ist, müssen wir ihre Variablen untersuchen. Funktionen, die keine nicht-lokalen Variablen (d. h. frei variable Variablen) haben, können keine Abschlüsse sein. Funktionen mit nicht-lokalen Variablen müssen von außerhalb ihres übergeordneten Bereichs referenziert werden, um Abschlüsse zu werden.

Fall 1: Friend's Program

<code class="javascript">for(var i = 0; i < 10; i++) {
    (function(){
        var i2 = i;
        setTimeout(function(){
            console.log(i2);
        }, 1000)
    })();
}</code>
Nach dem Login kopieren

In diesem Fall die Funktion Es fehlen geschlossene Variablen für den übergeordneten Bereich und es handelt sich daher nicht um einen Abschluss. Die an setTimeout übergebene innere Funktion ist jedoch ein Abschluss, da sie den Zugriff auf die freie Variable i2 erfasst und aufrechterhält.

Fall 2: Autorenprogramm

<code class="javascript">for(var i = 0; i < 10; i++) {
    setTimeout((function(i2){
        return function() {
            console.log(i2);
        }
    })(i), 1000);
}</code>
Nach dem Login kopieren

Hier , die innere Funktion behält den Zugriff auf die freie Variable i2 bei und bleibt ein Abschluss, auch wenn außerhalb ihres übergeordneten Bereichs referenziert wird.

Schlussfolgerung:

In beiden Fällen werden Abschlüsse verwendet . Das Programm des Autors verwendet einen Abschluss, um den Wert von i richtig zu erfassen. Durch die Rückgabe einer anderen Funktion und deren Übergabe an setTimeout kann die innere Funktion auf die geschlossene Variable i2 zugreifen. Dadurch wird sichergestellt, dass nach der Verzögerung der korrekte Wert auf der Konsole ausgegeben wird.

Das obige ist der detaillierte Inhalt vonSind anonyme Funktionen in JavaScript immer Abschlüsse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!