原文链接:Is-Var-Dead?

新的标准es6出来以后,我们了解了两种新的声明方式,letconst - 它们俩都是干嘛的,作用域是什么样的?当然,通过大家对es6标准的了解,相信大家都知道了,但是又一个问题:到底在什么合适的时候用到它们?

这个问题是一个相当热门的话题,因为有些人仍然使用var的声明方式,我们在看文章的时候可能会看到有人会说:var的声明方式已经完蛋了,以后都替换成letconst的声明方式吧!

有一种观点是:“var 没有结束 - 因为有些地方还是需要用到它的 - 它是和letconst不同的是它是函数作用域(function scoped)而letconst是块级作用域,而且,var可以多次重新用var声明,已完全可以继续使用它。”因为没有什么严格的规定,所以没有什么正确的答案,仅仅只是一种观点,你可以自己决定是否使用var

在本文里呢,我只想列出多个关于var是否已经放弃的话题,至于怎么选择,聪明的你需要自己去权衡了。

来看看这个观点- Mathias Bynens说:只要不是声明变量后要立马去改变它的属性的,你就可以不用考虑直接用const吧!

Later在他的文章里说到letconst的区别

  • 默认的话就用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吧。