选择如何更好地利用ES6 const并让

时间:2016-12-25 06:20:38

标签: javascript ecmascript-6

免责声明:我知道下面的问题可能被视为"征求意见" (所以它不属于主题) 但事实并非如此:我正在寻找利弊和/或缺点事实,在考虑这一点时应考虑到这一点。

我偶然读过(来自优秀的Exploring ES6)一段专注于const vs let vs var的摘录,结论陈述(粗体是我的):

  

然后我们有两种方法:

     
      
  1. 首选constconst标记不可变绑定
  2.   
  3. 首选letconst标记不可变的
  4.         

    我略微倾向于#1,但#2也很好。

让我感到困惑的是:这种偏好似乎是基于两种方法之间产生的差异的深刻的技术意义,好像作者感到基本上关注代码是如何工作的低水平

但我也感到担心(也许是第一次!)可读性方面:从这个角度来看,#2似乎更好地使代码更强语义上重要关于处理数据会发生什么。

但也许我错过了#1选择的一些优势......?

编辑,利用建议重复的链接:Why most of the time should I use const instead of let in javascript?

事实上,对这个问题的公认答案实际上是以这样的方式揭露事物,而不是强迫我遵守我之前的观点,即#2胜过#1。

BTW我意识到我的问题可能不是那么清楚,所以这里有一个更详细的重写:

  • 我非常了解(AFAIK)constlet之间的所有技术差异,所以我的问题并没有提出任何相关问题。
  • #1和#2之间选择涉及的真正在于使用const 来处理任何不可变对象 (尽管其内容可能会更改!)vs 仅用于冻结对象

在那里,我很惊讶作者更喜欢#1,因为(从我的观点来看)它更具误导性。
使用对象的最常见方式是它们的内容在此过程中发生变化,因此如果使用#1,则在其声明级别读取const

  • 充其量我们不知道应该发生什么。
  • 在最坏的情况下,我们可以想象它的内容永远不会改变,而它可以!

另一方面,选择使用#2,我们可以相信const - 声明的对象不会改变(实际上除了疏忽和/或错误)。

所以回到我的问题:由于上面的反思似乎显然导致选择#2,我想知道我可能错过了哪一点,这使得作者更喜欢#1。

2 个答案:

答案 0 :(得分:7)

为了与你追求事实的旅程保持一致,我会避免陈述观点并用客观,简单的术语描述我的答案。

作者的偏好不是基于“深刻的技术意义”,因为重要性实际上相当浅:简而言之,两个关键词之间的唯一区别是 const 变量不能重新分配,但变量可以。

首选项#1的目的是以定义它的特定方式使用 const ,从而防止将变量指向新的赋值。

首选项#2的目的是假装(或 act ),就像初始化 const 变量的任何RHS值一样,这是不可变的,这需要开发人员努力了解并采取相应行动。

#2的缺点是它引入了一个用 const 编码的约定,它与它的实际功能不一致,所以它主要是编码标准和代码维护的问题。换句话说,如果开发团队规定 const 必须仅用于不可变声明,那么使代码更容易理解不应该修改这些值,而是事实并非他们无法被修改的情况。 (如果要遵循此约定,那么 const 仅用于实际不可变的值,例如使用Object.freeze()

#1的优势在于你正在设计使用 const :你正在处理这些变量,就好像他们的作业无法改变,而不是假装 const 提供它不提供的东西(即不变性),因此开发人员没有可能错误地修改他们应该假装无法修改的 const 对象的内容。

答案 1 :(得分:1)

因此我们知道 var 是函数范围,并且我们知道 let const 是块范围。

您只能将一个值分配给相同的let&const变量一次。

说定了

let name = 'John';

然后将值更改为

let name = 'Doe';

它不会让你,它会说名称已经被声明 但是您可以更新let变量。

name = "Doe";

但是您不能两次声明它。

不同于 var

var name = 'John';
var name = 'Doe';

const 值不能像 let

那样更新

例如:

const API = 'acb123';

您以后不能像 let

一样更改其值。
API = 'azxy123';