是否需要使用`for.of`/`for.in`循环进行变量声明



我在网上看到这样的例子:

const roles = [];
for (i of roles) {
roleObj[roles[i].key] = true;
}

我们不需要像这样声明变量i吗?

for (let i of roles) {
roleObj[roles[i].key] = true;
}

很多文章都在宣传第一个例子,对我来说这似乎很愚蠢:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

您不一定需要这样做,但强烈建议您这样做,事实上使用let。请注意,在这种情况下使用let i的实际功能与仅使用for (ifor (var i的情况不同。

例如:

for (let i = 0; i < 10; i++) {
process.nextTick(() => console.log(i));
}
// print 0..9
for (var i = 0; i < 10; i++) {
process.nextTick(() => console.log(i));
}
// prints 10 ten times.

还要注意的是,使用let,您将不能在循环后使用i,但使用var可以,如果不使用var,变量将在全局范围内,因此如果它在函数内部,它的工作方式会有所不同:

function gl() {
for (i = 0; i < 10; i++) {}
for (var j = 0; i < 10; i++) {}
for (let x = 0; i < 10; i++) {}
console.log(i, j) // prints 10, 10
console.log(x) // runtime error
}
gl();
console.log(i) // prints 10
console.log(j) // runtime error

此外,正如注释中所提到的,在严格模式下不允许在没有声明的情况下访问变量。

最新更新