【问题标题】:Why can a for..of / for..in loop use const while a normal for loop can only use let or var for its variable in JS? [duplicate]为什么 for..of / for..in 循环可以使用 const 而普通的 for 循环在 JS 中只能使用 let 或 var 作为其变量? [复制]
【发布时间】:2021-06-14 01:39:39
【问题描述】:

在 JavaScript 中,你可以这样做:

const arr = [1, 2, 3, 4, 5];

for (const v of arr) console.log(v);

但在正常的for循环中,它会给出TypeError:

for (const i = 0; i < 5; i++) console.log(i);

// TypeError: Assignment to constant variable.

难道 for..of 不应该也报错吗?

【问题讨论】:

    标签: javascript for-loop constants let


    【解决方案1】:

    在for...of 中创建一个循环,在arr 中进行迭代。

    const x = [1,2,3,4,5,6]
    for (const n of x) {
       console.log(n)
    }
    

    它将遍历对象或数组,并且

    for (let i = 0; i < n;i++) {}
    

    这里 i = 0 然后 i = 1 然后 i = 2 等等。 这就是你不能使用 CONST 的原因,因为(你不能为 const 重新赋值)i 将被重新赋值。

    【讨论】:

      【解决方案2】:

      不,for(...of...) 循环不会出错。原因如下:

      在第二个for循环中,您正在编辑不允许允许的常量变量。这会引发类型错误。在第一个 for 循环中,使用什么类型的变量赋值并不重要。变量(const、let、var 或无标识符)调用迭代器,该迭代器创建了一种隔离的临时范围。这就是为什么您不能在 for 循环之外访问变量的原因。例如:

      const example = 1;
      example = 2;
      //TypeError
      
      for (const someVar of Array(5)) someVar = 12;
      //TypeError
      
      {
          const num = 200;
      }
      
      const num = 150;
      //This is fine because of scope
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 2020-02-17
        • 2011-04-21
        • 2018-10-31
        • 2016-08-31
        相关资源
        最近更新 更多