块级声明变量 let

  1. 一个函数内部
  2. 被一对花括号包裹
  3. 禁止重复声明,但在嵌套的作用域中可以,因为没有变量提升了嘛。

不会进行变量提升,如需要,需手抖在函数体头部声明变量。

声明常量const

  1. 与let一样都是块级声明变量
  2. const用来声明常量,一旦声明不可修改
  3. 必须在声明的时候被初始化,否则运行的时候报错
  4. 当使用const声明对象的时候,会阻止变量绑定,但是不会阻止修改对象成员。
  5. 与let一样不可以被重复声明。

暂时性死区(TDZ)

在代码快中使用 let const 声明变量常量,会造成暂时性死区,即在执行到该声明语句之前,是无法访问该变量/常量的,即使是 typeof 也会报错。特备注意是在代码块中会存在此特性
在代码块内使用let const声明的变量常量,在代码快外使用 typeof 不会报错

再循环中使用let const

  1. 在循环内使用let声明i 避免在外面访问到
  2. 巧妙使用let 实现闭包的功能
  3. for 循环中不要用const声明'i' 在进行i++时报错。
  4. for-in for-of 循环中使用不会报错

全局块级绑定

使用 var 声明的全局变量会挂载到 window 对象下,容易造成覆盖原对象中的成员。使用 let const 声明的全局变量不会挂载到 window 对象下。

最佳实践

在默认情况下使用const,而只在你知道变量值需要被改变的情况下才使用 let 这在代码中能确保基本层次的不可变性,有助于防止某些类型的错误。