[JS] ES6 const, let


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)
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *