點擊右上方紅色按鈕關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!
眾所周知,JavaScript中只一個全局作用域和函數作用域。而自從有了ES6標準之後,便和其它高級語言一樣有了塊級作用域。那,大家想過為什麼新標準會引入塊級作用域的概念呢?
今天來簡單分析一下,同時發表一下我對這個問題的小小的看法。
如果沒有塊級作用域,我們在寫JavaScript代碼時,就會存在很多隱晦的麻煩,極其容易出錯。下面我就想到兩種情況,如果沒有塊級作用域,你將需要謹慎對待了。
第一種情況:內層變量可能會覆蓋外層變量
上面這段代碼,如果沒有tmp='hello world'這一行,函數運行時。
輸出結果:Sun Apr 29 2018 22:10:28 GMT+0800 (中國標準時間)
現在在內部加上這麼一行。輸出結果就是undefined。原因在於變量提升,導致內部的tmp變量覆蓋了外層的tmp變量。如果有了塊級作用域,函數內部的if語句包含的變量將是獨立的。關於變量提升不是很清楚的同學,可以參考我之前寫的這篇文章:
第二種情況:用來計數的循環變量洩露為全局變量。
上面代碼中,變量i只用來控制循環,但是循環結束後,它並沒有消失,洩露成了全局變量。
總結:
在新標準中,出現了塊級作用域,降低了很多代碼風險。
閱讀更多 小鄭搞碼事 的文章