ES6標準中爲什麼引入塊級作用域?

點擊右上方紅色按鈕關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!

眾所周知,JavaScript中只一個全局作用域和函數作用域。而自從有了ES6標準之後,便和其它高級語言一樣有了塊級作用域。那,大家想過為什麼新標準會引入塊級作用域的概念呢?

今天來簡單分析一下,同時發表一下我對這個問題的小小的看法。

如果沒有塊級作用域,我們在寫JavaScript代碼時,就會存在很多隱晦的麻煩,極其容易出錯。下面我就想到兩種情況,如果沒有塊級作用域,你將需要謹慎對待了。

第一種情況:內層變量可能會覆蓋外層變量

ES6標準中為什麼引入塊級作用域?

上面這段代碼,如果沒有tmp='hello world'這一行,函數運行時。

輸出結果:Sun Apr 29 2018 22:10:28 GMT+0800 (中國標準時間)

現在在內部加上這麼一行。輸出結果就是undefined。原因在於變量提升,導致內部的tmp變量覆蓋了外層的tmp變量。如果有了塊級作用域,函數內部的if語句包含的變量將是獨立的。關於變量提升不是很清楚的同學,可以參考我之前寫的這篇文章:

第二種情況:用來計數的循環變量洩露為全局變量。

ES6標準中為什麼引入塊級作用域?

上面代碼中,變量i只用來控制循環,但是循環結束後,它並沒有消失,洩露成了全局變量。

總結:

在新標準中,出現了塊級作用域,降低了很多代碼風險。


分享到:


相關文章: