在javascript中基于全局变量定义函数

时间:2015-11-11 05:40:13

标签: javascript

我试图每隔5秒打印一个数字:

for(i=0; i<10; i++) {
    setTimeout(function() {
        console.log(i)
    }, 5000 * i);
}

但是我每5秒打印10因为循环结束而全局变量i是10。有没有办法避免这种情况发生?

3 个答案:

答案 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秒,将安排每个打印!