为什么 for..of / for..in 循环可以使用 const 而普通的 for 循环在 JS 中只能使用 let 或 var 作为其变量?
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?
在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 循环中,您正在编辑 NOT 允许的常量变量。这会引发 TypeError。在第一个 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
在 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
将被重新分配。
在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 循环中,您正在编辑 NOT 允许的常量变量。这会引发 TypeError。在第一个 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
在 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
将被重新分配。