for (var index = 1; index <= 3; index++) {
setTimeout(function() {
console.log('after ' + index + ' second(s):' + index);
}, index * 1000);
}
output:
after 4 second(s):4
after 4 second(s):4
after 4 second(s):4
after 4 second(s):4
我明白使用"让"而不是"var"解决了这个问题,但我的问题是,在世界上setTimeout函数内部的回调函数知道运行4次给定setTimeout的执行开始循环完成后?
这是一个更有针对性的问题,试图通过后续问题更好地理解问题。我不明白setTimeout函数是如何知道回调函数运行多少次的。
只要在setTimeout
之外添加一个console.log()
,你就会发现原因了
for (var index = 1; index <= 3; index++) {
// it will execute this line 3 times,then begin to invoke console.log inside setTimeout
console.log("before: " + index)
setTimeout(function () {
console.log('after ' + index + ' second(s):' + index);
}, index * 1000);
}