总结

let 与 const 块级绑定将词法作用域引入了 JS。这两种声明方式都不会进行提升,并且只会在声明它们的代码块内部存在。由于变量能够在必要位置被准确声明,其表现更加接近其他语言,并且能减少无心错误的产生。作为一个副作用,你不能在变量声明位置之前访问它们,即便使用的是 typeof 这样的安全运算符。由于块级绑定存在暂时性死区(TDZ),试图在声明位置之前访问它就会导致错误。

let 与 const 的表现在很多情况下都相似于 var,然而在循环中就不是这样。在 for-in 与 for-of 循环中,let 与 const 都能在每一次迭代时创建一个新的绑定, 这意味着在循环体内创建的函数可以使用当前迭代所绑定的循环变量值(而不是像使用 var 那样,统一使用循环结束时的变量值)。这一点在 for 循环中使用 let 声明时也成立, 不过在 for 循环中使用 const 声明则会导致错误。

块级绑定当前的最佳实践就是:在默认情况下使用 const,而只在你知道变量值需要被更改的情况下才使用 let。这在代码中能确保基本层次的不可变性,有助于防止某些类型的错误。