for...in 可以用const声明item

代码:

    function* foo() {
      yield 1;
      yield 2;
      yield 3;
    }
    const genr = foo();
    for (const item of genr) {
      console.log(item);
    }

    for (const i = 0; i <= 5; i++) {
      console.log("i", i);
    }

在这里插入图片描述

在这两段代码中,尽管两者都包含 for 循环,但它们的用途和行为有所不同,这也是为什么 const 在第一个循环中可以使用,但在第二个循环中会导致错误的原因。

  1. 第一个循环:for...of 循环

    • for...of 循环中,循环遍历的是一个可迭代对象(如生成器或数组),并在每次迭代时生成新的变量(在这里是 item)。
    • constfor...of 循环中的作用是为每次循环创建一个新的块作用域,item 在循环体内仅为当前迭代中的值。
    • 在循环的每一次迭代中,item 都是从生成器(或其他可迭代对象)中获取的新值,且它在循环体内不会被改变。这种行为适合 const 的不可变性特性。
  2. 第二个循环:for 循环

    • for 循环中,你定义了一个初始化表达式、条件表达式、循环体和步进表达式。在这段代码中,你使用 const 声明循环变量 i,并且设定它的初始值为 0
    • for 循环需要在每次迭代中递增 i(即 i++),这相当于对 i 进行重新赋值。这与 const 的不可变性相矛盾,因为 const 声明的变量不能被重新赋值。
    • 因此,使用 constfor 循环中会导致错误,因为 i 在每次循环迭代中需要递增。

解决方法是,在 for 循环中使用 let 来声明 i

for (let i = 0; i <= 5; i++) {
    console.log("i", i);
}

这样做允许 i 在每次迭代中递增而不引发错误。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值