為什么要使用let去替代var?
因為var沒有塊級作用域的限制,容易造成變量污染俗孝。
下面我們來看幾個在let沒出現(xiàn)之前酒甸,沒有塊級作用域時會帶來的問題。
1.變量作用域
2.沒有塊級作用域的if語塊
這看起來好像沒什么赋铝,但我們?nèi)绻麍鼍皶r這樣呢插勤?
為什么會這樣?我們只是在if語句塊外面的修改了name革骨,卻影響了整個if語句的輸出农尖。
3.沒有塊級作用域的for語塊
我們可以看出,無論我們點擊哪個按鈕良哲,輸出的都是第五個按鈕被點擊盛卡,為什么會這樣?因為這就跟我們在循環(huán)體內(nèi)用var定義有關筑凫。
在沒有塊級作用域之前滑沧,我們是通過閉包來解決這種尷尬的,因為閉包有自己的函數(shù)作用域巍实。
使用了let后滓技,我們只需要做出細微的改變,將循環(huán)體中var變成let棚潦,就可以避免使用閉包這種難度大的語法令漂。
循環(huán)體中l(wèi)et實現(xiàn)原理:
你們會問,那使用var之前是怎樣的丸边?(這塊比較繞叠必,本人小白也不太懂哈)
ES5之前因為if和for都沒有塊級作用域的這樣一個概念,所以在很多具體的應用場景原环,我們都必須去借助于function的作用域來解決應(調(diào))用外面變量的的問題挠唆。
ES6家庭中,加入了let和(const)嘱吗,使if和for語句有了塊級作用域的存在(原先的var并沒有塊級作用域的概念)。
let的出現(xiàn)滔驾,通過上述例子谒麦,可以說很好彌補了var現(xiàn)存的缺陷,我們可以把let看成完美的var哆致,或者是對var的修整和升級绕德,優(yōu)化。