首页 > 解决方案 > for...of 循环。我应该使用 const 还是 let?

问题描述

当使用 for of 循环时,这两个都是允许的并且可以工作:

const numbers = [1,2,3];
// works
for(let number of numbers) {
    console.log(number);
}
// also works
for(const number of numbers) {
    console.log(number);
}

我总是使用const,因为我不喜欢在任何情况下更改number变量,但是当我在其他人的代码中看到for...of循环时,它经常使用let. const也许有一个我没有看到的缺点?浏览器漏洞?

为什么使用const以及何时letfor...of循环中使用?

标签: javascriptecmascript-6for-of-loop

解决方案


为什么使用const以及何时letfor...of循环中使用?

如果在循环体内没有对标识符进行赋值,那么无论您使用let还是基本上都是样式问题const

如果const您希望循环主体中的标识符是只读的(例如,如果有人稍后修改代码以添加分配,则这是一个主动错误)。如果let您希望能够分配给它(因为您的代码中有一个分配,或者您希望某人能够稍后添加一个而不更改声明),请使用它。

你可以用for-offor-in循环来做到这一点。循环的for控制变量通常不是常量(因为在正常情况下,您会在 ; 的“更新”子句中更新它for;如果不这样做,for可能是使用错误的循环),因此您通常使用let它。


为清楚起见,这是一个在循环体内进行赋值的示例:

for (let str of ["a", " b", " c "]) {
    str = str.trim();
//  ^^^^^----- assignment to the identifier
    console.log(`[${str}]`);
}

如果你在上面使用constfor str,你会得到一个错误:

for (const str of ["a", " b", " c "]) {
    str = str.trim();
//  ^^^^^----- Error
    console.log(`[${str}]`);
}


推荐阅读