[ES6] 箭頭函式(Arrow Function)
箭頭函式
- 語法比原有函式更簡單
- 提高程式碼可讀性
- 具有詞法上綁定 this 的特性
ex:
const func = (x) => x + 1
相當於
const func = function (x) { return x + 1 }
大括號 {}
如果函式有多行語句(表達式)時就要使用大括號,如 () => {}
使用大括號時,return 需要自己加,否則會 undefined
小括號 ()
只有單一個傳入參數時,可以不需前面作為傳入參數使用的小括號,例如 x => x * x
箭頭函式可以取代某些原先使用 self = this
或 .bind(this)
的情境
函式物件中的 call、apply、bind 三個方法,無法覆蓋箭頭函式中的 this 值
箭頭函式與原有函式的差異
- 沒有定義本地端綁定(local bindings) 的以下幾個變數,也就是說這些變數將由 lexical(詞法的) 綁定: arguments, super, this, new.target
- 不能當作建構函式(constructor) 使用
- 原有函式: this 值是動態的,由呼叫這個函式的擁有者物件(Owner) 決定 箭頭函式: this 是 lexical(詞法的)作用域決定,也就是由週邊的作用域所決定
- 箭頭函數並不綁定 arguments object
不能使用箭頭函式的情況
- 用物件字面文字定義物件時,物件中的方法
- 在物件的prototype屬性中定義的方法
- DOM事件處理的監聽者(事件處理函式)
- 建構函式(constructor)