我无法理解这个程序是如何执行的

时间:2017-02-06 17:14:23

标签: javascript settimeout

这是一个javascript代码段。我不明白在输出中只打印'5'。那只是一次。

以下是代码:

for(var i = 0; i < 5; i++) {
    setTimeout(function () {
        console.log(i);
    }, 1000 * i);
}

输出 - 5

1,2,3,4不应该是输出?

1 个答案:

答案 0 :(得分:0)

首先,它不会以1秒的间隔打印5次,而是每次打印5次

for(var i=0; i<5 ; i++) {
 setTimeout( function() {
 console.log(i) ; }, 1000*i);
}

这是因为超时函数回调在循环完成后都运行良好。事实上,随着计时器的推移,即使每次迭代都是setTimeout(.., 0),所有这些函数回调仍然会在循环完成后严格运行,这就是为什么5被反映为最后的原因。循环中i的值。每个计时器处理函数将共享相同的变量“i”

如果你想每次分开价值。您可以在其中调用单独的函数i作为值,因此每个函数都有不同的值

function checkTimeout(i) {
      setTimeout(function() { console.log(i); }, 1000*i);
    }
    
    for (var i = 1; i <= 5; ++i) {
      checkTimeout(i);
    }