Heim > Web-Frontend > js-Tutorial > Warum gibt eine For-Schleife mit setTimeout unerwartete Werte aus?

Warum gibt eine For-Schleife mit setTimeout unerwartete Werte aus?

Patricia Arquette
Freigeben: 2024-12-29 07:46:15
Original
937 Leute haben es durchsucht

Why Does a For-Loop with setTimeout Print Unexpected Values?

In setTimeout eingeschlossene For-Schleife gibt unerwartete Werte aus

In diesem Skript iteriert eine For-Schleife mit der Variablen i von 1 bis 2, und innerhalb der Schleife wird eine Timeout-Funktion mit einer Verzögerung von 100 Millisekunden eingestellt, um den Wert von i bei der Ausführung zu benachrichtigen. Das erwartete Verhalten besteht jedoch darin, dass das Skript 1 und 2 nacheinander ausgibt, stattdessen jedoch 3 zweimal alarmiert wird.

Das unerwartete Verhalten ergibt sich aus der Tatsache, dass i in der gesamten Schleife gemeinsam genutzt wird und als Schleife geändert wird schreitet voran. Zum Zeitpunkt der Ausführung der Timeout-Funktionen hat i bereits 3 erreicht, was dazu führt, dass beide Warnungen diesen Wert anzeigen.

Um dieses Problem zu beheben und aufeinanderfolgende gedruckte Werte sicherzustellen, ist es notwendig, für jede Timeout-Funktion separate Kopien von i zu erstellen . Dies kann durch die Definition einer dedizierten Funktion, doSetTimeout, erreicht werden, die i als Argument verwendet und das Timeout mithilfe dieses spezifischen Werts festlegt.

Das geänderte Skript, das doSetTimeout verwendet, lautet wie folgt:

function doSetTimeout(i) {
  setTimeout(function() {
    alert(i);
  }, 100);
}

for (var i = 1; i <= 2; ++i)
  doSetTimeout(i);
Nach dem Login kopieren

Mit dieser Änderung erstellt jede Iteration der Schleife eine neue Kopie von i, die an doSetTimeout übergeben wird, um sicherzustellen, dass jedes Timeout mit dem richtigen Wert ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWarum gibt eine For-Schleife mit setTimeout unerwartete Werte aus?. 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