for( var i=0; i< 10; i++) {
setTimeout(function(){
console.log(i);
}, 10);
}
答案 0 :(得分:1)
这是因为关闭,你应该做那样的事情
for( var i=0; i< 10; i++) {
(function(j){
setTimeout(function(){ console.log(j); }, 10);
}(i));
}
这是基本的javascript封闭,你可以在这里阅读更多How do JavaScript closures work?
问题是for循环首先完成,所以最后i
将等于10.之后,setTimeout
函数将被调用,当它们检查{{1}的值时他们会发现它等于for循环的最后一个值10。
我所做的是一个i
,它为IIFE (Immediately Invoked Function Expression)
函数的范围创建一个新变量,所以当超时到来时,它会找到自己没有改变的变量。