为了账号安全,请及时绑定邮箱和手机立即绑定

有关var变量的变态问题。

有关var变量的变态问题。

弑天下 2019-04-14 11:20:56
今天做一个循环想得到1,2,3...10的输出结果。自己写的放弃了,然后看到了这么一个方案,但不是很理解,不知道自己哪一方面知识的欠缺,求大神解答!!!varfuncs=[];for(vari=0;i
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

其实前面有几位兄台已经说得很清楚了。我这里就再通俗地解释一下。
首先看下失败的代码:
varfuncs=[]
for(vari=0;i<3;i++){
funcs.push(function(){
console.log(i)
})
}
funcs[0]()//3
funcs[1]()//3
funcs(2)()//3
为什么这样呢?其实如果剥离掉for语句,以上代码会像这样子:
varfuncs=[],
i=0
funcs.push(function(){
console.log(i)
})
i++
funcs.push(function(){
console.log(i)
})
i++
funcs.push(function(){
console.log(i)
})
i++
funcs[0]()//3
funcs[1]()//3
funcs[2]()//3
为什么会输出上面的结果显而易见了吧。那么要达到所需要的要求怎么做呢?通常就在push方法中传入一个自执行函数,并且将i作为自执行函数的参数,以供作用于它内部。
varfuncs=[],
i=0
funcs.push((function(i){
returnfunction(){
console.log(i)
}
}(i)))
i++
funcs.push((function(i){
returnfunction(){
console.log(i)
}
}(i)))
i++
funcs[0]()//0
funcs[1]()//1
现在还原到for语句的形式:
varfuncs=[]
for(vari=0;i<3;i++){
funcs.push((function(i){
returnfunction(){
console.log(i)
}
}(i)))
}
//这里会依次输出0,1,2
funcs.forEach(function(f){
f()
})
Over~
                            
查看完整回答
反对 回复 2019-04-14
  • 1 回答
  • 0 关注
  • 370 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号