为什么大多数时候我应该在JavaScript中使用const而不是let?

时间:2016-12-11 13:22:47

标签: javascript const

为什么大多数时候我应该在JavaScript中使用const而不是let?我们知道如果我们使用const,那么我们以后就无法重新赋值。那么为什么不使用let而不是const?

3 个答案:

答案 0 :(得分:20)

您应该在代码中使用letconst

  • let如果变量的值在代码
  • 期间发生变化
  • const如果它不会(但这是一个受项目风格指南影响的风格问题)

在实践中,如果您遵循通常的规则来保持您的功能较小等,那么令人惊讶的是,这意味着您使用const (如果您/您的团队想要)因为你最终不需要改变变量的值。 (好吧,无论如何,这让我感到惊讶......)

当变量的¹值无意改变时,使用const可以完成以下任务:

  1. 它告诉其他人读你的代码,你不打算改变这个值。

  2. 如果您执行的操作会更改变量的值而不打算这样做,那么它会给您一个很好的主动错误。 (智能IDE可以主动标记它。)

  3. 它提示JavaScript引擎的优化器,你不会改变该变量的值。虽然引擎可以经常通过静态代码分析来解决这个问题,但使用const可以省去麻烦,并且当静态代码分析可能无法显示值不变时,就可以这样做。

  4. 当您收到上述#2中的错误时,您可以做出一个明智的决定:您应该将其更改为let,还是您不是要首先更改该变量的值?

    ¹是的,使用术语“变量”来指代根据定义不变的东西是很有趣的。 :-)规范的术语是“绑定”,但我打赌你不会听到人们很快就会在日常会话中谈论“绑定”...所以总体术语可能会保持“变量”,除非我们可以特别提到某种东西是“不变的”。

答案 1 :(得分:5)

为什么默认情况下使用const是一种意见

默认情况下,使用const不再表示意图来创建实常数(例如开发人员可以先用const声明变量,然后再将其切换为执行期间let)。另一方面,这种做事方式暗示使用let代表警告:“注意此变量将被修改”。

默认使用let并不表示修改或不修改变量的意图。但这使得使用const代表以下信息:“我希望这个变量是一个常数”。

所以这是编程风格的问题。

支持默认使用const的参数

默认使用const的论据如下:

  1. 避免因非自愿重新分配造成的副作用;
  2. 在代码审核期间,它消除了不确定性,因为看到const变量的开发人员可以指望它不会被重新分配;
  3. 也许我们可以说它与函数式编程和不可变状态更加一致。
  4. 使用TypeScript,有些情况会有更好的推论。
  5. 以下是将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

    1. 重新分配不是危险的事情,只是......通常;
    2. 如果可以重新分配变量 ,那么它应该用let声明,因为保留const的真实常量更具表现力;
    3. const具有误导性,因为它不会阻止引用被修改;
    4. 要编写和捆绑两个字符;
    5. 默认使用const与函数参数不一致;
    6. 使用const没有性能提升。

答案 2 :(得分:0)

要声明不可编辑的变量,可以使用const

同时使用let(如果您有一个可编辑的变量)。

它也可以用于变量作用域

请参阅:letconst


为什么我们大多数时间都使用const

因为const声明会创建对值的只读引用(无法重新分配)。

这可以防止我们与变量的值混淆