它不打印0,1,2,3,4,5 ... 10它的打印10次10​​

时间:2017-04-02 23:14:22

标签: javascript

  • 我是js的新手
  • 我认为下面的代码会输出0,1,2,3,4,5,6,7,8,9,差距为10毫秒。
  • 但它的印刷效果并不像它打印10次。
  • 是因为设置超时还是别的什么?
  • 你们能告诉我它为什么会发生......这对我有所帮助,理解js
for( var i=0; i< 10; i++) {
    setTimeout(function(){ 
        console.log(i);
    }, 10);

}

1 个答案:

答案 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)函数的范围创建一个新变量,所以当超时到来时,它会找到自己没有改变的变量。