为什么以下javascript会记录3
3次而不是0
,1
和2
?
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 42);
}
对于每次迭代,是否应该根据该迭代的i
值创建新函数?然后该函数作为参数传递给setTimeout
?
答案 0 :(得分:1)
这是因为匿名函数指的是变量i。当这些匿名函数即将执行时,i的值为3。什么是更好的解决方案是这样的:
for (var i = 0; i < 3; i++) {
setTimeout(function(i) {
console.log(i);
}, 42, i);
}
在匿名函数范围内缓存迭代索引的前值,可以打印3个不同的值。