Konsekutiver Wertdruck in For-Schleifen mit setTimeout
Problem:
Im Folgenden Im Skript wird die Funktion „setTimeout“ innerhalb einer for-Schleife verwendet, um Werte nacheinander zu alarmieren. Die resultierende Ausgabe zeigt jedoch, dass der Wert „3“ zweimal anstelle von „1“ und „2“ gedruckt wird, wie erwartet.
for (var i = 1; i <= 2; i++) { setTimeout(function() { alert(i) }, 100); }
Grund:
Das Problem entsteht, weil der Wert von i in der for-Schleife im Laufe der Zeit geändert wird, die Funktion setTimeout jedoch nur einen Verweis auf das Original erfasst Variable.
Lösung:
Um dieses Problem zu beheben, sollte die i-Variable als eindeutiger Wert für jede Timeout-Funktion erfasst werden. Dies kann erreicht werden, indem eine neue Funktion erstellt wird, die i als Argument verwendet und dann setTimeout mit diesem Argument aufruft:
function doSetTimeout(i) { setTimeout(function() { alert(i); }, 100); } for (var i = 1; i <= 2; ++i) doSetTimeout(i);
Bei diesem Ansatz erstellt jede Iteration der Schleife eine eindeutige Kopie der i-Variablen. Stellen Sie sicher, dass die gemeldeten Werte wie erwartet nacheinander gedruckt werden.
Das obige ist der detaillierte Inhalt vonWarum gibt „setTimeout' in einer „for'-Schleife unerwartete Werte aus und wie kann dies behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!