为什么大多数时候我应该在 JavaScript 中使用
const
而不是 let
?正如我们所知,如果我们使用 const
那么我们以后就不能重新分配价值。那为什么不用 let
而不是 const 呢?
基本上,
let
如果变量的值会在代码中改变const
如果它不会你/你的团队想在你正在处理的项目中的那些情况下使用const
;这是风格问题如果你确实使用了
const
,那么令人惊讶的是,上面的指南意味着你使用 const
的频率是多少,因为你最终不需要更改变量的值(如果你遵循保持变量值的通常规则大小合理的函数等)。 (好吧,无论如何,这让我感到惊讶......)
当变量的¹值不打算改变时使用
const
完成一些事情:
它告诉其他阅读您代码的人您不打算更改该值。
如果您更改代码以便它写入该变量,它会给您一个很好的主动错误。 (一个像样的 IDE 可以主动标记它,但如果没有,你会在运行代码时收到错误。)然后你可以做出明智的、有意识的决定:你应该将它更改为
let
,还是你不是故意的首先更改该变量的值?它向 JavaScript 引擎的优化器提示您不会更改该变量的值。虽然引擎可以通过代码分析经常解决这个问题,但使用
const
可以省去麻烦。 (警告:我不知道这对 JavaScript 引擎是否真的有用。看起来是这样,但运行时代码优化是一个非常复杂且有时不直观的过程。)¹ 是的,使用术语“变量”来指代定义上不变的事物很有趣。 :-) 规范的术语是“绑定”,但我敢打赌你不会很快听到人们在日常对话中谈论“绑定”......所以聚合术语可能会保持“可变”,除非我们可以具体提及作为“常数”的东西。
默认使用
const
本质上是编程风格的问题。但是各有利弊:
const
的论据支持默认使用
const
的论据如下:
const
变量的开发人员可以确信它不会被重新分配;这是使用 TypeScript
const
时的优势示例:
const hello = "Hello" as string | undefined
if (hello !== undefined) {
["A", "B"].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
的论据我在这里总结了文章默认使用“let”,而不是“const”,它给出了支持默认使用
let
而不是const
的论据:
let
声明,因为为实常数保留const
更有表现力;const
具有误导性,因为它不会阻止修改引用;const
与函数参数不一致;const
没有性能提升。使用
const
而不是 let
有一些好处:
可读性:它向其他开发人员发出信号,变量的值一旦分配就不会更改。这使代码更易于阅读和理解,因为读者不必担心代码中的其他地方会重新分配值。
Security:当您使用
const
时,该值不会被无意或有意地重新分配。这有助于防止错误或恶意代码更改变量的值。
性能:
const
还可以通过知道该值不会改变来帮助JavaScript引擎优化代码。
也就是说,
const
应该只用于在整个程序执行过程中不会改变的值。如果稍后需要重新分配变量,则应使用let
.