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

求解这两个输出区别?

求解这两个输出区别?

拉丁的传说 2019-05-24 11:39:36
constGreeters=[]for(vari=0;i
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

典型面试题,变量生命周期问题,for循环问题和函数形参问题。let和var的不同,var是在当前代码块结束之后仍然在内存保留该变量和值,而let则是不保留,直接回收。而for循环输出是等到循环全部结束。所以第一种全部都是10。而第二种方式不是undefined呢,很简单,用到了闭包,注意这里返回的不是值,而是函数,如果第二种直接输出,那就是undefined,但是现在返回函数,我们还记得函数的形参吗,没错,函数调用时形参是对实参的一个复制,所以在输出时实参虽然被回收了,但是形参还保留了值。所以JS中循环取值和输出的最简单解决方式就是闭包。
                            
查看完整回答
反对 回复 2019-05-24
?
莫回无

TA贡献1865条经验 获得超7个赞

第一种情况,我觉得相当于这样:
vari;
functionprint(){
returnconsole.log(i);
}
constGreeters=[]
for(i=0;i<10;i++){
Greeters.push(print);
}
console.log(`Nowi=${i}`);//注意这里i=10;
Greeters[0]()//10
Greeters[1]()//10
Greeters[2]()//10
第二组情况,let活动范围仅限于for循环中,那么每次把函数加入到数组中时,i传递了当前的i值,
function(){
returnconsole.log(i);
}
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 325 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信