为什么代码将结果输出为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)})
答案 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.