免责声明:我知道下面的问题可能被视为"征求意见" (所以它不属于主题) 但事实并非如此:我正在寻找利弊和/或缺点事实,在考虑这一点时应考虑到这一点。
我偶然读过(来自优秀的Exploring ES6)一段专注于const
vs let
vs var
的摘录,结论陈述(粗体是我的):
然后我们有两种方法:
- 首选
const
:const
标记不可变绑定。- 首选
醇>let
:const
标记不可变的值。我略微倾向于#1,但#2也很好。
让我感到困惑的是:这种偏好似乎是基于两种方法之间产生的差异的深刻的技术意义,好像作者感到基本上关注代码是如何工作的低水平。
但我也感到担心(也许是第一次!)可读性方面:从这个角度来看,#2似乎更好地使代码更强语义上重要关于处理数据会发生什么。
但也许我错过了#1选择的一些优势......?
编辑,利用建议重复的链接:Why most of the time should I use const instead of let in javascript?
事实上,对这个问题的公认答案实际上是以这样的方式揭露事物,而不是强迫我遵守我之前的观点,即#2胜过#1。
BTW我意识到我的问题可能不是那么清楚,所以这里有一个更详细的重写:
const
和let
之间的所有技术差异,所以我的问题并没有提出任何相关问题。const
来处理任何不可变对象 (尽管其内容可能会更改!)vs 仅用于冻结对象。在那里,我很惊讶作者更喜欢#1,因为(从我的观点来看)它更具误导性。
使用对象的最常见方式是它们的内容在此过程中发生变化,因此如果使用#1,则在其声明级别读取const
:
另一方面,选择使用#2,我们可以相信const
- 声明的对象不会改变(实际上除了疏忽和/或错误)。
所以回到我的问题:由于上面的反思似乎显然导致选择#2,我想知道我可能错过了哪一点,这使得作者更喜欢#1。
答案 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';