这是一个javascript代码段。我不明白在输出中只打印'5'。那只是一次。
以下是代码:
for(var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000 * i);
}
输出 - 5
。
1,2,3,4
不应该是输出?
答案 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);
}