块级作用域绑定的let const 为JavaScript引入了词法作用域,它们声明的变量不会提升,而且只可以在声明这些变量的代码中使用。
这一新特性还存在一个副作用,即不能在声明变量前访问它们,就算用typeof这样安全的操作符也不行。在声明前访问块级作用域会导致报错,因为绑定在临时死区(TDZ)中。
循环中的使用。在for-in for-of循环中,let和const都会每次迭代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值,而非最后一次迭代后的值(像使用var那样)。let在for循环中同样如此,但在for循环中使用const声明则可能引发错误。
当前使用块级绑定的最佳实践是:默认使用const,只在确实需要改变变量的值时使用let。这样就可以在某种程度上实现代码的不可变,从而 一些错误的产生。