塊級作用域綁定的let const 為JavaScript引入了詞法作用域,它們聲明的變量不會提升,而且只可以在聲明這些變量的代碼中使用。
這一新特性還存在一個副作用,即不能在聲明變量前訪問它們,就算用typeof這樣安全的操作符也不行。在聲明前訪問塊級作用域會導致報錯,因為綁定在臨時死區(qū)(TDZ)中。
循環(huán)中的使用。在for-in for-of循環(huán)中,let和const都會每次迭代時創(chuàng)建新綁定,從而使循環(huán)體內(nèi)創(chuàng)建的函數(shù)可以訪問到相應(yīng)迭代的值,而非最后一次迭代后的值(像使用var那樣)。let在for循環(huán)中同樣如此,但在for循環(huán)中使用const聲明則可能引發(fā)錯誤。
當前使用塊級綁定的最佳實踐是:默認使用const,只在確實需要改變變量的值時使用let。這樣就可以在某種程度上實現(xiàn)代碼的不可變,從而 一些錯誤的產(chǎn)生。