原文链接:Is-Var-Dead?
新的标准es6出来以后,我们了解了两种新的声明方式,let
和 const
- 它们俩都是干嘛的,作用域是什么样的?当然,通过大家对es6标准的了解,相信大家都知道了,但是又一个问题:到底在什么合适的时候用到它们?
这个问题是一个相当热门的话题,因为有些人仍然使用var
的声明方式,我们在看文章的时候可能会看到有人会说:var
的声明方式已经完蛋了,以后都替换成let
和const
的声明方式吧!
有一种观点是:“var
没有结束 - 因为有些地方还是需要用到它的 - 它是和let
和const
不同的是它是函数作用域(function scoped)而let
和const
是块级作用域,而且,var
可以多次重新用var
声明,已完全可以继续使用它。”因为没有什么严格的规定,所以没有什么正确的答案,仅仅只是一种观点,你可以自己决定是否使用var
。
在本文里呢,我只想列出多个关于var
是否已经放弃的话题,至于怎么选择,聪明的你需要自己去权衡了。
来看看这个观点- Mathias Bynens说:只要不是声明变量后要立马去改变它的属性的,你就可以不用考虑直接用const
吧!
Later在他的文章里说到let
和const
的区别
- 默认的话就用
const
- 如果你声明的值需要立马去改变它的话就用
let
- 在es6里永远不要用
var
无论什么时候如果你要声明一个变量,假定它就是const
。当你写代码的时候要去改变你声明的变量的时候再把const
更改为let
。这样的话你就用const
可以保持你声明的变量不可变,这样有利于减少程序的不可预见性。
另一种比较流行的观点是Kyle Simpson提出的(这个👨男人写过很多牛逼的javascript书哦):
- 把
var
用到顶级的作用域可以让它声明的变量作用到各个作用域中 - 把
let
用的确定的小的作用域里面 - 把
let
替换成const
,当你下面的值需要去改变的时候再改回来,当然你如果声明这个变量的时候确定要改变它的话那就直接食用let
就好了
他说,从根本上说,当你在比较大的作用域下是可以使用var
把它声明的变量用到其它需要的函数里面去,当你用小型的作用域的时候就使用let
,如果你敲代码的时候突然发现你需要去改变它,那你就回去把const
替换成let
。如果你使用的let
,把它重构为const
也是比较容易的。
综合这些观点,你可以自己做出选择了,而我自己会默认用const
,当需要去改变这个值当时候就用let
替换掉它,而且还是完全的摆脱var
吧。