0%

JS 筆記 - 認識 ES6

ES6

什麼是 ES6

JavaScript 所採用的標準是 ECMAScript,自 2012 年起,所有現代的瀏覽器均已全面支援 ECMAScript 5.1。較老舊的瀏覽器最少也會支援 ECMAScript 3。ECMA International 於 2015 年 6 月 17 日發布第六版的 ECMAScript,其正式名稱是 ECMAScript 2015,原先被稱作 ECMAScript 6 或 ES6。

但 ES6 語法依然還有瀏覽器不支援,所以還會利用 BABEL 做編譯,但 ES6 在開發上的確會省下不少時間,而且編輯器外掛直接可以安裝 BABEL,是提升 JS 程式碼品質的最佳利器!

let、const

let、const 是 ES6 之後加入的用法,其作用的範圍跟 var 有些差異。

  • let 與 const 是區塊作用域(block scope),區塊就是在大括號內 { } 。
  • var 是函式作用域(function scope)。

let 跟 var 的不同

let 可以宣告只能在目前區塊、階段或表達式中作用的變數。而 var 則是定義了一個全域變數,或是在整個 function 而不管該區塊範圍。宣告 let 的作用範圍是它們被定義的區塊,以及該區塊包含的子區塊。這樣看起來功能跟 var 很相似。主要不同的地方在於 var 作用範圍是「整個」function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function varTest() {
var a = 1;
{
var a = 2; // 這裡的 a 是一樣的,會改變整個 function 的 a
console.log(a); // 2
}
console.log(a); // 2
}

function letTest() {
let b = 1;
{
let b = 2; // 這裡的 b 是不同的,只會作用在這層 if 區塊中
console.log(b); // 2
}
console.log(b); // 1
}

在上列例子裡的最前行 let 和 var 不同,let 並不會在全域物件中建立變數。舉例來說:

1
2
3
4
var x = "global";
let y = "global";
console.log(this.x); // "global"
console.log(this.y); // undefined

const

const 宣告的是常數,英文全名是: Constants,常數在被宣告時就務必要指定給值,不然會產生錯誤。

常數是不可再指定(can’t re-assignment)的。

const 一定要帶值,不帶值會跳錯。因為 const 在宣告時必須給定值,並且不能再被更改,這可以有效降低出現錯誤的機會。如果是需要變更的數值則改用作用範圍較小的 let 做宣告,來減少錯誤出現的機率,Ex: for 迴圈。

在 ES6 當中會首推使用 const,避免汙染到全域變數,並且給予值之後,比較不會因為輸入錯誤關係而跳錯,回頭找不到 BUG,如果使用 funciton 或是 for 迴圈,可以使用 let,總之,盡量使用 const 跟 let 代替 var 就是了!

如果真的要使用 var 宣告變數,還是可以,如果在許多的 function 中會使用到該變數的內容,還是可以使用 var 做宣告,但還是會建議在各函式中使用 let,會比較好維護!


參考文章: