塊級(jí)作用域

ES5沒(méi)有塊級(jí)作用域,只有全局作用域和函數(shù)作用域,由于這一點(diǎn),變量的作用域甚廣,所以一進(jìn)入函數(shù)就要馬上將它創(chuàng)建出來(lái)。這就造成了所謂的變量提升。

ES5的“變量提升”這一特性往往一不小心就會(huì)造成一下錯(cuò)誤:

  1. 內(nèi)層變量覆蓋外層變量

    var tmp = new Date();function f() {  console.log(tmp);  if (false) {    //執(zhí)行則undefined
        var tmp = "hello world";
      }
    }
  2. 變量泄露,成為全局變量

    var s = 'hello';for (var i = 0; i < s.length; i++) {  console.log(s[i]);
    }console.log(i); // 5

往常我們往往是使用閉包來(lái)解決這一問(wèn)題的(比如自執(zhí)行函數(shù))?,F(xiàn)在,基于這一問(wèn)題,ES6增加了塊級(jí)作用域,所以不再需要自執(zhí)行函數(shù)了。

let 和 const

ES6是是向后兼容的,而保持向后兼容性意味著永不改變JS代碼在Web平臺(tái)上的行為,所以

網(wǎng)友評(píng)論