在javascript

时间:2017-01-10 17:38:53

标签: javascript

为什么代码将结果输出为10为console.log(i)。为什么它不打印1,2..10?

for(i=0;i<10;i++){

    function abc(callback){

    console.log(i); 
    setTimeout(callback,5000);  
    }

}

abc(function (){console.log(i)})

2 个答案:

答案 0 :(得分:1)

可以看看提升和功能范围。您的代码将主要看起来像这样(在解析器视图中)

for(i=0;i<10;i++){}
//i=1
//i=2
//i=3
//...
//i=10
function abc(callback){ 
setTimeout(callback,5000); 
} 

abc(function (){console.log(i)})//i is 10 :0

我想你想要什么:

    function abc(callback){ 
      for(var i=0;i<10;i++){
        (function(i){//see 'closures in for loops' on SO
          setTimeout(callback,5000); 
        })(i);
      } 
   }

  abc(()=>{alert(i)});//hehe

答案 1 :(得分:0)

这是因为i具有全局范围,并且在for循环之后,当您调用该函数时,i的值为10.