let在循环中的使用

发布于 2022-09-04 19:01:19 字数 290 浏览 30 评论 0

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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

挽梦忆笙歌 2022-09-11 19:01:19
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);
}

希望你能看出端倪。。

笔芯 2022-09-11 19:01:19

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

嘴硬脾气大 2022-09-11 19:01:19

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

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


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

感谢纠正~

银河中√捞星星 2022-09-11 19:01:19

这是原文吧:

clipboard.png

心安伴我暖 2022-09-11 19:01:19

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

扎心 2022-09-11 19:01:19
// 只是觉得上面答案
// 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"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文