js实现异步循环实现代码

问题

当实现异步循环时,可能会遇到问题。

让我们尝试编写一个异步方法,在循环中打印一个周期的索引值。



对于(var i = 0;i < 5;i + +){
setTimeout(){()函数(
Document.writeln(我);document.writeln();
},1000);
}



上述程序的输出如下所示:











原因

每个时间(超时)的结束指向原来的i,而不是它的副本。因此for循环将i增加到5,然后超时运行并调用当前i值(即,5)。

解决方法

复制I有几种不同的方法。最常用和最常用的方法是通过声明函数并将i传递给这个函数来建立闭包。

运行代码



对于(var i = 0;i < 5;i + +){
(函数(数字){
setTimeout(){()函数(
document.writeln(努姆);document.writeln();
},1000);
})(一);
}



输出