Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie können Sie bei der Verwendung von Abschlüssen in JavaScript-Schleifen sicherstellen, dass jeder Abschluss den richtigen Wert erfasst?

Linda Hamilton
Freigeben: 2024-10-16 17:49:02
Original
438 Leute haben es durchsucht

When Using Closures in JavaScript Loops, How Can You Ensure Each Closure Captures the Correct Value?

Abschlüsse in JavaScript-Schleifen: Ein praktisches Beispiel

In JavaScript tritt ein häufiges Problem auf, wenn Abschlüsse innerhalb von Schleifen verwendet werden, bei denen der Wert von a Die vom Abschluss erfasste Variable ist nicht der erwartete Wert.

Problem:

Beim Definieren von Funktionen innerhalb einer Schleife mit dem Schlüsselwort var verweisen alle Funktionen auf dieselbe Variable außerhalb von Schleife. Dies kann zu unerwarteten Ergebnissen führen, wie im folgenden Code zu sehen ist:

<code class="js">var funcs = [];
for (var i = 0; i < 3; i++) {
  funcs[i] = function() {
    console.log("My value:", i);
  };
}</code>
Nach dem Login kopieren

Beim Ausführen dieses Codes wird „Mein Wert: 3“ dreimal gedruckt, obwohl wir davon ausgehen, dass er sich von 0 auf 2 erhöht.

Lösungen:

ES6-Lösung: Let

In ECMAScript 6 (ES6) führt das Schlüsselwort let den Blockbereich für Variablen ein. was dieses Problem löst. Mit let erstellt jede Iteration der Schleife eine neue Variable i mit einem auf die Schleife beschränkten Gültigkeitsbereich:

<code class="js">for (let i = 0; i < 3; i++) {
  funcs[i] = function() {
    console.log("My value:", i);
  };
}</code>
Nach dem Login kopieren

ES5.1-Lösung: forEach

In Umgebungen die die Funktion Array.prototype.forEach unterstützen, können wir ihre Einzigartigkeit nutzen, um für jede Iteration unterschiedliche Abschlüsse zu erstellen. Die Callback-Funktion empfängt das aktuelle Element des Arrays als Parameter und stellt so sicher, dass jede Funktion einen eindeutigen Wert erfasst:

<code class="js">var funcs = [];
[0, 1, 2].forEach(function(i) {
  funcs[i] = function() {
    console.log("My value:", i);
  };
});</code>
Nach dem Login kopieren

Klassische Lösung: Abschlüsse

Der Klassiker Die Lösung besteht darin, einen Abschluss zu erstellen, der die Variable an einen bestimmten Wert außerhalb der Schleife bindet. Dies wird erreicht, indem eine neue Funktion zurückgegeben wird, die den gewünschten Wert erfasst:

<code class="js">for (var i = 0; i < 3; i++) {
  funcs[i] = (function(i) {
    return function() {
      console.log("My value:", i);
    };
  })(i);
}</code>
Nach dem Login kopieren

Indem wir i als Argument an die innere Funktion übergeben, stellen wir sicher, dass jeder Abschluss den richtigen Wert erfasst.

Das obige ist der detaillierte Inhalt vonWie können Sie bei der Verwendung von Abschlüssen in JavaScript-Schleifen sicherstellen, dass jeder Abschluss den richtigen Wert erfasst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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!