let在循环中的使用

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

像上面的循环,会输出0、1、2
let是明确的不允许重复声明的
去掉注释后是下面这样,会输出3个abc我目前理解不明白,有人能够解释一下吗?

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
阅读 4.6k
6 个回答
for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}

等于

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

希望你能看出端倪。。

let 是不能在同一作用域上重复声明,但for里的条件语句和循环内部显然不是。

http://es6.ruanyifeng.com/#do...
参考下阮老师的书吧

let 不是 const
你说的 let 不允许重复声明是在 swift 里面的吧
let 作用在块级作用域
当 i = 0时候,你执行了 i = 'abc' 的赋值操作,当然输出的是 'abc',后面的循环同理


以上纯属胡扯,看了书以后,其实是 for 循环中的 i 和 循环体中的 i 是 2个不同的作用域,是互相独立的。

感谢纠正~

两个作用域不同,所以可以重新声明

// 只是觉得上面答案
// let i;
// 写在外面不太对,因为在for之外是访问不到的。

for (let i = 0; i < 3; i++){
  console.log(i);
  // for块级作用域,i可见
  {
  // let创建了一个新作用域
  let i = 'abc';
  console.log(i);}
}


Output:
0
"abc"
1
"abc"
2
"abc"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏