我一直在试图理解为什么下面的代码段表现为它的作用:闭合如何影响for循环?
for (var i=1; i<=5; i++) {
setTimeout(function timer(){
console.log(i);
}, i*1000);
} //prints 6 five times with a gap of one second in between each
为什么6?我看到了一些解释,但我仍然无法理解。另外为什么下面的代码工作?
for (var i=1; i<=5; i++) {
(function(){
var j = i;
setTimeout(function timer(){
console.log(j);
}, j*1000);
})();
}
第二个代码片段在每个循环中创建一个'i'的副本,所以当超时实际触发时,您会看到保存状态为'i'。第一个例子总是引用相同的'i',因此当超时最终触发时,它们都显示'i'的最终值。 – Sirko