ES6 又稱為 ECMAScript 2015,為 JS 提供了一些語法更新和新的語法糖,讓開發者可以用更短的程式達到相同的功能。
目前 ES6 在瀏覽器中尚未完全被支援,因此需要透過 Babel 轉譯回 ES5,讓瀏覽器可正常辨識,相關相容性可以參考:http://kangax.github.io/compat-table/es6/
常用的 Feature 可以參考這個網站:http://es6-features.org/,還有簡單明瞭的範例簡直超貼心。
變數宣告 const, let
const 用來宣告常數,常數是不可變的,因此若想要更改會報錯。需要注意的是 Object 或 Array 是 by reference,所以是指向記憶體位置,因此若 push 值或是增加物件屬性,是可以正常運作的。
const PI = 3.14; PI = 2; // Uncaught TypeError: Assignment to constant variable. const person = {} person.name = 'Winter'; // person = {name: "Winter"}
以往都使用 var 來宣告變數,但這樣宣告出來的變數是全域的,如果沒特別被包起來,很容易發生在程式碼中四處宣告導致污染的情況。ES6 新增了 let 關鍵字,若用 let 宣告變數,變數將會是 Block-Scoped (塊級作用域),當一個 block 結束就會自動消滅。
for (var i = 0; i < 2; i++) { console.log('for:' + i); } console.log('out:' + i); // out: 2 for (let i = 0; i < 2; i++) { console.log('for:' + i); } console.log('out:' + i); // out: undefined
官方建議能使用 let 的地方就盡量使用,另外舉一個最常被拿來說明閉包 (Closure) 的例子,如果沒有使用立即函式 (IIFE, Immediately Invoked Function Expression) 給予保護,變數 i 會被 for 迴圈影響,在 1 秒後印出三次 2。但如果使用 let 的話,一切變得很 Awesome!
for (var i = 0; i < 2; i++) { (function (i) { window.setTimeout(function() { console.log(i); }, 1000) })(i); } // 使用 let for (let i = 0; i < 2; i++) { window.setTimeout(function() { console.log(i); }, 1000) }