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

这个变量i,有点不太懂

这个变量i,有点不太懂

繁星淼淼 2019-05-25 14:38:57
for(leti=0;i
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

因为let具有块级作用域的特性,因此i只会在当前循环有效。实际上你的循环创建了5个块级作用域,每一个i值都只在当前的块级作用域中有效果。
你的代码等同于如下:
"usestrict";
var_loop=function_loop(i){
a[i]=function(){
console.log(i);
};
};
for(vari=0;i<5;i++){
_loop(i);
}
a[2]();
这里就很容易能看出:实际上let的存在让每一个i值都保存在了一个闭包中。因此这个循环创建了5个闭包。而a数组里则保存了一堆函数,每一个函数都访问了对应的闭包中的i值。
所以i的值肯定是存在的而不undefined。
当你看不懂ES6语法相关的代码时,可以利用babel的在线工具将ES6的例子转换成ES5的代码。在线地址
                            
查看完整回答
反对 回复 2019-05-25
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

你这不是创建了5个函数吗?
a[0]=function(){
console.log(0);
}
a[1]=function(){
console.log(1);
}
a[2]=function(){
console.log(2);
}
.....
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 442 浏览
慕课专栏
更多

添加回答

举报

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