「译」Var变量死了吗?

Is var Dead? What should I use?

Posted by Jeremy He on 2016-09-27

本文翻译自WESBOS的一篇文章

我们应该用什么?

我们已经从ES6规范里学习了 letconst 关键字 - 它们是做什么的和它们的作用范围。我们还知道了什么时候它们可以或不可以被重新指定(再赋值),但是还有一个问题:我们到底应该怎么用它们呢?

现在在社区里这个问题已经是一个热门话题里,因为有些同学倾向于继续用 var, 而有些朋友说:”var以及死了!”.一些人说“用 let.”,而另一些人则用 const.

var死了吗?

var并没有死,它还是有这属于它特性的作用,它是以函数为作用域的,你可以重新指派或者是重新绑定它. 你仍然可以继续使用它, 这个问题并没有 正确 的答案,只是不同人有不同的想法,参考他们的想法并作出你自己的决定.

下面我要列出两个典型的意见. 它们都是由在Javascript领域里有丰富的经验和独到的见解的同学发表的,
参考一下:

第一个意见是Mathia Bynens发表的,他说:”const 不是关于immutability(不可变性)”

注:immutabiliy变量中你可以改变其属性,它只是不能被重指定

在他的文章中他关于 let vs. const的意见是:

  • 默认用 const
  • 如果需要重新指定值那么用 let
  • var在ES6中不应该再用了

当你创建一个变量时, 假定它是 const 的,如果你需要更新这个值那么就使用 let.

另一个比较流行的意见是来自于Kyle Simpson的,他写过一些Javascript系列的好书.

  • 如果需要在大的范围内(如函数范围)共享这个变量,那么用 var.
  • 如果是小范围内的本地变量可以用 let.
  • 重构 letconst 当你很确定这个值不会被重新制定.

他说, 用 var 是为了在一个大的范围共享这个变量,如果在一个小一点儿的范围那么用 let, 如果你一开始给变量指定成 const, 当你在之后发觉你必须要更新这个值的时候,你还必须得退回原处用 let 代替 const. 如果你一开始就用 let, 以后发觉不需要更新想重构成 const 也非常方便.

总结

两个意见都很有理有据, 你可以按照自己的意愿选择适合情景的方式, 但是看过ES6官方文档后,我决定采用Mathia Bynens的方案, 完全的远离 var😄.