(我的理解ES6就是對ES5的BUG修改和升級)
廢話很少說今天要探討的是 var與let
ECMAScript 6 入門 做者:阮一峯es6
下面是我的總結:
let不容許在相同做用域內,重複聲明同一個變量。
let 特色是塊級做用域code
先來看一下ES5中時常出現的變量提高的問題!ip
var tmp = new Date(); function f() { console.log(tmp); if(false) { var tmp = 'hello world'; } console.log(tmp); }
輸出結果爲undefined,緣由在於變量提高,致使內層的tmp變量覆蓋了外層的tmp變量。作用域
在ES6的語法中解決的變量提高的問題 是這麼實現的!get
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5 }
這裏你們能夠本身試驗 將內層 和外層的 n 分別用var let 來定義 就發現
let不容許在相同做用域內,重複聲明同一個變量。
lef 特色是塊級做用域
let 的特色獲得明顯的體現!io
再看一個ES5中的循環變量泄露爲全局變量console
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5
很明顯i成了全局變量。
ES6中入門
for (let i = 0; i < 10; i++) { // ... } console.log(i); // ReferenceError: i is not defined
這代表,let聲明的變量只在它所在的代碼塊有效。 function
本人目前瞭解的還不夠深!
好比ES6中添加一個新的詞彙 「暫時性死區」(temporal dead zone,簡稱 TDZ)。變量
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
我能夠把它理解爲ES6解決不了的BUG!非要給他定義成一個詞彙麼?(笑死)!也但願大牛前來解答探討!