JavaScript中的var、let和const声明之间有什么区别?

这是JavaScript面试中最常见的问题。在ES6出现之前,var是JavaScript里面声明变量的唯一方式,在ES6出现之后,才出现了let和const关键字来声明变量。具体可以参见前面写的三篇文章:

问题1:var和ES5中的let / const有什么区别?

特性varlet/const
创建块作用域x
重新声明x
提升(hoisted)x

从语言设计上,letconst更加规范,避免了之前var带来的种种弊端。

问题2: let和const有什么区别?

特性letconst
重新赋值x
声明时未赋值默认值是undefined报错:SyntaxError: Missing initializer in const declaration

问题3: 可以更改用const声明的变量的值吗?

是的,可以更改引用的对象,但是不能更改引用本身,即不能给const声明的变量赋新对象。以const声明的数组为例:我们不能赋另一个数组,但是可以更改现有数组的值,因为引用未更改。

结论

在目前推荐的编码风格中:

  • 不使用var
  • 不改变值或引用,用const来声明。
  • 需要改变值或引用,用let来声明。