塊級作用域
ES5沒有塊級作用域,只有全局作用域和函數(shù)作用域,由于這一點,變量的作用域甚廣,所以一進入函數(shù)就要馬上將它創(chuàng)建出來。這就造成了所謂的變量提升。
ES5的“變量提升”這一特性往往一不小心就會造成一下錯誤:
內(nèi)層變量覆蓋外層變量
var tmp = new Date();function f() { console.log(tmp); if (false) { //執(zhí)行則undefined var tmp = "hello world"; } }
變量泄露,成為全局變量
var s = 'hello';for (var i = 0; i < s.length; i++) { console.log(s[i]); }console.log(i); // 5
往常我們往往是使用閉包
來解決這一問題的(比如自執(zhí)行函數(shù))?,F(xiàn)在,基于這一問題,ES6增加了塊級作用域
,所以不再需要自執(zhí)行函數(shù)了。
let 和 const
ES6是是向后兼容的,而保持向后兼容性意味著永不改變JS代碼在Web平臺上的行為,所以
延伸閱讀
學習是年輕人改變自己的最好方式