为什么大多数时候我应该在JavaScript中使用const
而不是let
?我们知道如果我们使用const
,那么我们以后就无法重新赋值。那么为什么不使用let
而不是const?
答案 0 :(得分:20)
您应该在代码中使用let
或const
:
let
如果变量的值在代码const
如果它不会(但这是一个受项目风格指南影响的风格问题) 在实践中,如果您遵循通常的规则来保持您的功能较小等,那么令人惊讶的是,这意味着您使用const
(如果您/您的团队想要)因为你最终不需要改变变量的值。 (好吧,无论如何,这让我感到惊讶......)
当变量的¹值无意改变时,使用const
可以完成以下任务:
它告诉其他人读你的代码,你不打算改变这个值。
如果您执行的操作会更改变量的值而不打算这样做,那么它会给您一个很好的主动错误。 (智能IDE可以主动标记它。)
它提示JavaScript引擎的优化器,你不会改变该变量的值。虽然引擎可以经常通过静态代码分析来解决这个问题,但使用const
可以省去麻烦,并且当静态代码分析可能无法显示值不变时,就可以这样做。
当您收到上述#2中的错误时,您可以做出一个明智的决定:您应该将其更改为let
,还是您不是要首先更改该变量的值?
¹是的,使用术语“变量”来指代根据定义不变的东西是很有趣的。 :-)规范的术语是“绑定”,但我打赌你不会听到人们很快就会在日常会话中谈论“绑定”...所以总体术语可能会保持“变量”,除非我们可以特别提到某种东西是“不变的”。
答案 1 :(得分:5)
const
是一种意见默认情况下,使用const
不再表示意图来创建实常数(例如开发人员可以先用const
声明变量,然后再将其切换为执行期间let
)。另一方面,这种做事方式暗示使用let
代表警告:“注意此变量将被修改”。
默认使用let
并不表示修改或不修改变量的意图。但这使得使用const
代表以下信息:“我希望这个变量是一个常数”。
所以这是编程风格的问题。
const
的参数默认使用const
的论据如下:
const
变量的开发人员可以指望它不会被重新分配; 以下是将const
与TypeScript一起使用时的优势示例:
const hello = "Hello" as string | undefined
if (hello !== undefined) {
["Pierre", "Paul"].forEach(
name => console.log(`${hello.toUpperCase()}, ${name}`) // OK
)
}
使用let
,在strict
模式下,TypeScript会检测到错误:
let hello = // …
// …
name => console.log(`${hello.toUpperCase()}, ${name}`)
// ^__ error here: Object is possibly 'undefined'.
let
的参数我在这里总结了一篇文章 Use “let” by default, not “const” ,它提供的论据支持默认使用let
而不是const
:
let
声明,因为保留const
的真实常量更具表现力; const
具有误导性,因为它不会阻止引用被修改; const
与函数参数不一致; const
没有性能提升。答案 2 :(得分:0)