猿问

JavaScript循环内的闭包为什么返回的是最后一个值

错误写法
for(vari=0;i<10;i++){
setTimeout(function(){
console.log(i);
},1000);
}
为什么这样写是错的
正确写法
for(vari=0;i<10;i++){
(function(e){
setTimeout(function(){
console.log(e);
},1000);
})(i);
}
为可以这样写?
for(vari=0;i<10;i++){
setTimeout((function(e){
returnfunction(){
console.log(e);
}
})(i),1000)
}
为可以这样写?
牛魔王的故事
浏览 558回答 2
2回答

缥缈止盈

//每次循环会调用setTimeout函数,其中指定了一个timeout后执行的函数//这个函数因为构成闭包的关系,其能够访问外层函数定义的变量,这个变量就是i//在for循环执行完毕后,i的值为10.此时在事件队列中有10个timeout函数等待执行//当timeout时间到时,对应的执行函数调用的i都是同一个,也就是10for(vari=0;i

慕莱坞森

因为ES6之前没有块作用域for(vari=0;i
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答