为什么打印的值在每次迭代时都不会改变?

时间:2015-08-10 06:24:13

标签: javascript

为什么以下javascript会记录3 3次而不是012

for (var i = 0; i < 3; i++) { 
  setTimeout(function() { 
    console.log(i); 
  }, 42); 
}

对于每次迭代,是否应该根据该迭代的i值创建新函数?然后该函数作为参数传递给setTimeout

1 个答案:

答案 0 :(得分:1)

这是因为匿名函数指的是变量i。当这些匿名函数即将执行时,i的值为3。什么是更好的解决方案是这样的:

for (var i = 0; i < 3; i++) { 
  setTimeout(function(i) { 
    console.log(i);
  }, 42, i);  
}

在匿名函数范围内缓存迭代索引的前值,可以打印3个不同的值。