我试图每隔5秒打印一个数字:
for(i=0; i<10; i++) {
setTimeout(function() {
console.log(i)
}, 5000 * i);
}
但是我每5秒打印10
因为循环结束而全局变量i
是10。有没有办法避免这种情况发生?
答案 0 :(得分:1)
您可以使用bind
创建闭包:
{{1}}
答案 1 :(得分:0)
如果允许ES6,您可以使用let
声明。
for (let i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i)
}, 5000 * i);
}
答案 2 :(得分:-1)
javascript中的setTimeout函数与python中的time.sleep(n)不同。代码不会暂停并在5秒后继续运行。它会将函数体设置在一个队列中,该队列将在您选择的时间内提供。由于你循环了10次,它会设置你的所有订单,这些订单基本上是打印在一个队列中并一起服务它们。为了避免这种情况,你可以在你看起来像这个
的东西中使用你的循环 setTimeout(function(){ console.log(i)}, 5000*i);
如果打印件距离最后一个打印5秒,将安排每个打印!