Heim > Web-Frontend > js-Tutorial > Was ist der Unterschied zwischen JavaScript-Abschlüssen und anonymen Funktionen?

Was ist der Unterschied zwischen JavaScript-Abschlüssen und anonymen Funktionen?

Barbara Streisand
Freigeben: 2024-10-29 18:18:45
Original
793 Leute haben es durchsucht

What's the difference between JavaScript closures and anonymous functions?

JavaScript-Verschlüsse und anonyme Funktionen

Verschlüsse sind ein entscheidendes Konzept in JavaScript, das es Funktionen ermöglicht, auf Variablen aus ihrem umschließenden Bereich zuzugreifen, auch nach dem Funktion aufgerufen wird. Es ist jedoch wichtig, zwischen Abschlüssen und anonymen Funktionen zu unterscheiden.

Betrachten Sie ein häufiges Beispiel: Verwenden einer Schleife und setTimeout, um die Protokollierung einer Zählervariablen zu verzögern. Ohne die Verwendung von Abschlüssen würde der Code den Endwert mehrmals drucken.

Falsche Verwendung von Abschlüssen:

for (var i = 0; i < 10; i++) {
  setTimeout(function() {
    console.log(i); // This incorrectly prints 10 for each iteration
  }, 1000);
}
Nach dem Login kopieren

Das Problem hierbei ist, dass die anonyme Funktion dies nicht tut Erfassen Sie den Wert von i für jede Iteration. Stattdessen wird der Verweis auf i im globalen Bereich erfasst, der schließlich den Endwert 10 erreicht.

Korrekte Schließungsverwendung:

for (var i = 0; i < 10; i++) {
  (function() {
    var i2 = i;
    setTimeout(function() {
      console.log(i2); // This correctly prints 0 to 9 with delay
    }, 1000);
  })();
}
Nach dem Login kopieren

In diesem Fall erstellt die anonyme Funktion eine neue Variable i2, die mit dem aktuellen Wert von i initialisiert wird. Die innere anonyme Funktion erfasst dann den Wert von i2 und verwendet ihn zur Protokollierung, wodurch der Wert der ursprünglichen Iteration erhalten bleibt.

Unterscheidung zwischen Abschlüssen und anonymen Funktionen:

Während alle Funktionen in JavaScript ihre Variablen technisch „schließen“, ist der Begriff „Schließen“ normalerweise Funktionen vorbehalten, die:

  • Zugriff auf Variablen aus einem äußeren Bereich haben (d. h. nicht lokal oder „ freie" Variablen)
  • Werden von außerhalb des Bereichs referenziert, in dem sie definiert sind (d. h. "geschlossen" um ihre freien Variablen)

Im ersten Beispiel funktioniert die anonyme Funktion nicht Diese Kriterien werden nicht erfüllt, da die Variable i nicht erfasst wird. Im zweiten Beispiel erfüllt die anonyme Funktion diese Bedingungen und wird daher als Abschluss betrachtet.

Schlussfolgerung:

Das Verständnis der Unterscheidung zwischen Abschlüssen und anonymen Funktionen ist entscheidend für die Leistungsfähigkeit von JavaScript effektiv nutzen. Abschlüsse ermöglichen die Interaktion von Funktionen mit ihrem umschließenden Bereich, sorgen für Kapselung und ermöglichen einen verzögerten Zugriff auf Variablen, was besonders für asynchrone Vorgänge und die Ereignisverarbeitung von Vorteil ist.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen JavaScript-Abschlüssen und anonymen Funktionen?. 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