块级绑定新的最佳实践
在ES6
的发展阶段,被广泛认可的变量声明方式是:默认情况下应当使用let
而不是var
。对于多数JS
开发者来说,let
的行为方式正是var
本应有的方式,因此直接用let
替代var
更符合逻辑。在这种情况下,你应当对需要受到保护的变量使用const
。
然而,随着更多的开发者迁移ES6
上,一种替代方案变得更为流行,那就是在默认情况下使用const
、并且只在知道变量值需要被更改的情况下才使用let
。其理论依据是大部分变量在初始化之后都不应当被修改,因为预期外的改动是bug
的源头之一。这种理念有着足够强大的吸引力,在你采用ES6
之后是值得在代码中照此进行探索实践的。
🎈总结
let
与const
块级绑定将词法作用域引入JS
。这两种声明方式都不会进行提升,并且只会在声明它们的代码块内部存在。由于变量能够在必要位置被准确声明,其表现更加接近 其他语言,并且能减少无心错误的产生。作为一个副作用,你不能在变量声明位置之前访问它们,即便使用的是typeof
这样的安全运算符。由于块级绑定存在暂时性死区(TDZ
), 试图在声明位置之前访问它就会导致错误。
let
与const
的表现在很多情况下都相似于var
,然而在循环中就不是这样。在for-in
与for-of
循环中,let
与const
都能在每一次迭代时创建一个新的绑定,这意味着在循 环体内创建的函数可以使用当前迭代所绑定的循环变量值(而不是像使用var
那样,统一使用循环结束时的变量值)。这一点在for
循环中使用let
声明时也成立,不过在for
循环中使用const
声明则会导致错误。
块级绑定当前的最佳实践就是:在默认情况下使用const
,而只在你知道变量值需要被更改的情况下才使用let
。这在代码中能确保基本层次的不可变性,有助于防止某些类型的错误。