javascript - 为什么 for..of/for..in 循环可以使用 const 而普通的 for 循环在 JS 中只能使用 let 或 var 作为其变量?

标签 javascript for-loop constants let

<分区>

在 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 不应该也出错吗?

最佳答案

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

在第二个 for 循环中,您正在编辑不允许 的常量变量。这会引发 TypeError。在第一个 for 循环中,使用什么类型的变量赋值并不重要。变量(constletvar 或无标识符)调用迭代器创建一种隔离的临时作用域。这就是为什么您不能在 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

关于javascript - 为什么 for..of/for..in 循环可以使用 const 而普通的 for 循环在 JS 中只能使用 let 或 var 作为其变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66660857/

相关文章:

jquery - jquery滚动问题。如何自动滚动 onclick 到 div

Java:查找百分比差异

for-loop - Stata——提取循环运行的 3500 个回归的回归输出

java - Kotlin 术语 "mutable"错了吗?

javascript - 我如何断言一个函数有 `await` 使用 should.js 编辑了一个异步函数

javascript - 从浏览器中隐藏 Javascript 错误消息

javascript - 为什么变量没有注册为 true 以使第二个 if 语句起作用?

javascript - 如何使用 for 循环来控制台记录数组的每个项目?

c++ - 编译器如何知道是否调用 const 重载?

c++ - 带有 const int* const 的 scanf 有效,但不应该