javascript - 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
以及何时let
在for...of
循环中使用?
解决方案
为什么使用
const
以及何时let
在for...of
循环中使用?
如果在循环体内没有对标识符进行赋值,那么无论您使用let
还是基本上都是样式问题const
。
如果const
您希望循环主体中的标识符是只读的(例如,如果有人稍后修改代码以添加分配,则这是一个主动错误)。如果let
您希望能够分配给它(因为您的代码中有一个分配,或者您希望某人能够稍后添加一个而不更改声明),请使用它。
你可以用for-of
和for-in
循环来做到这一点。循环的for
控制变量通常不是常量(因为在正常情况下,您会在 ; 的“更新”子句中更新它for
;如果不这样做,for
可能是使用错误的循环),因此您通常使用let
它。
为清楚起见,这是一个在循环体内进行赋值的示例:
for (let str of ["a", " b", " c "]) {
str = str.trim();
// ^^^^^----- assignment to the identifier
console.log(`[${str}]`);
}
如果你在上面使用const
for str
,你会得到一个错误:
for (const str of ["a", " b", " c "]) {
str = str.trim();
// ^^^^^----- Error
console.log(`[${str}]`);
}