Heim >Web-Frontend >js-Tutorial >js implementiert asynchrone Schleifenimplementierungscode_javascript-Fähigkeiten

js implementiert asynchrone Schleifenimplementierungscode_javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 15:15:271356Durchsuche

Frage
Bei der Implementierung einer asynchronen Schleife können Probleme auftreten.

Versuchen wir, eine asynchrone Methode zu schreiben, die den Indexwert der Schleife einmal in einer Schleife ausgibt.

<script>
for(var i = 0; i < 5; i++){
setTimeout(function(){
document.writeln(i);document.writeln("<br />");
},1000);
}
</script>

Die Ausgabe des obigen Programms ist:

5
5
5
5
5

Grund

Jedes Timeout (Timeout) verweist auf das ursprüngliche i, nicht auf seine Kopie. Also erhöht die for-Schleife i auf 5, dann läuft die Zeitüberschreitung und ruft den aktuellen Wert von i auf (der 5 ist).

Lösung

Es gibt verschiedene Möglichkeiten, i zu kopieren. Die gebräuchlichste und am häufigsten verwendete Methode besteht darin, einen Abschluss zu erstellen, indem eine Funktion deklariert und i an diese Funktion übergeben wird. Wir verwenden hier eine selbstaufrufende Funktion.

Führen Sie den Code aus

<script>
for(var i = 0; i < 5; i++){
(function(num){
setTimeout(function(){
document.writeln(num);document.writeln("<br />");
},1000);
})(i);
}
</script>

Ausgabe

0
1
2
3
4

Stellungnahme:
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