循环中的javascript setTimeout [关闭]

时间:2014-12-27 08:31:46

标签: javascript

有人可以解释一下这段代码的工作原理。

var display = function(i) {
  return function(){
    console.log(i);
  };
};

for(var i=0; i<5; i++) {
  setTimeout(display(i), i*1000);
}

据我所知,每次迭代都会调用display函数。 或者在循环执行完毕后调用,然后触发超时?

2 个答案:

答案 0 :(得分:4)

for迭代将快速运行5次,并且等于运行这些行:

 setTimeout(display(0), 0*1000);
 setTimeout(display(1), 1*1000);
 ...
 setTimeout(display(4), 4*1000);

结果将是:

 display(0) will launch after 0 seconds.
 display(1) will launch after 1 seconds.
 ...
 display(4) will launch after 4 seconds.

答案 1 :(得分:0)

你循环运行,但显示将在其中的每个setTimeout间隔值上调用。 所以根据上面的代码示例:它将执行类似 - &gt;

的操作

1 sec之后第一次调用,在2 sec之后第二次调用,依此类推,即它将通过时间间隔生成相同代码部分的那么多副本,并将随着时间的推移运行。