es6 let for循环

在这里插入图片描述
具体 要先看 这个
然后看 这个
然后看 这个
也看看 这个
一扫而过 这个

个人理解:
下面的例子:

for (let i = 0; i < 10; i++) { 
	setTimeout(()=>console.log("i:",i), 1000); 
}

// 去糖(desugar)之后的模拟代码
// 用区块符区分每次循环的语句
// 每次for语句开始,i指定为一个全域刻度__status,这只是方便说明而已
// __status会记录for语句i最后的值
{ let i;
  i = 0;
  __status = {i};
}
{ let {i} = __status;
  if (i < 10)
      setTimeout(()=>console.log("i:",i), 1000);
      __status = {i};
}   
    { let {i} = __status;
      i++;
      if (i < 10)
          setTimeout(()=>console.log("i:",i), 1000);
          __status = {i};
    }
    //...

对于 下面的情况

for (let i = 0; i < 3; console.log(i),i++) {
  let i = 'a';
  console.log(i);
}
// a a a

我觉得应该是:

{ let i;
  i = 0;
  __status = i;
}
{ let i = __status;
  if (i < 10){
      let i = 'a';
      setTimeout(()=>console.log("i:",i), 1000);
  }
  __status = i;
}   
{ let i = __status;
  i++;
  if (i < 10){
      let i = 'a';
      setTimeout(()=>console.log("i:",i), 1000);
  }
  __status = i;
}
// 至于这样组织的代码,for循环中的判断是怎么中断或者继续的?
// 会不会其实是判断嵌套
/*
i++;
if(i<10){
	i++;
	if(i<10){
		i++;
		if(i<10){
			// 就像这样?一旦哪个判断不符合循环就不执行了
		}
 		__status = i;
	}
	 __status = i;
}
 __status = i;
*/

es6写法 以及 babel转译后的代码:

for (let i = 0; i < 3; console.log(i),i++) {
  let i = 'abc';
  console.log(i);
}

/*-------------babel--------*/
for (var i = 0; i < 3; console.log(i), i++) {
  var _i = 'abc';
  console.log(_i);
}

// 证明for循环()中的i和{}中的i不在同一个作用域,实际上每次循环i都已经是一个新的变量

还有一个例子就是 这个 例子里面 eyesofkids 的 答案,我比较倾向于这种解释。与 这个 里面关于let在for循环中的解释差不多(但应该不是通过词法作用域,而是在{}里面再let i了一下)

最后附上 阮大的let说明 例子也不错 传送门

如果上面有什么说错的地方,烦请看官们勘正一下,十分感谢
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值