箭頭函式 Arrow Function 是 ES6 非常受人喜愛的功能,同時支援普通函式所具備的功能,包括預設值、解構、rest 參數,它擁有以下幾個特性:
- 更短的函式寫法(怎麼寫)
- 綁定 this(怎麼用)
更短的函式寫法
先說結論,使用箭頭函式,以下兩種寫法是相等的。1
2
3
4
5
6//normal function
function add(x){
return x + 5
}
//arrow function
const add = x => x + 5
Step by Step
讓我們先寫一般普通的 Function,帶兩個參數 x 跟 y,然後 return x + y1
2
3
4//normal function
function add(x, y){
return x + y
}
Arrow Function 把函式本身儲存在一個變數或常數,中間用等號 =
隔開
1 | const add = function (x, y){ |
然後我們把 function 拿掉,參數的後面加上 =>
,這樣我們就完成了我們的箭頭函式。
1 | const add = (x, y) => { |
如果我們的函式只有單行運算式,我們還可以省略後面的花括號 {}
,然後 return
也可以省略
1 | const add = (x, y) => x + y |
這裡有一個重點,如果我們省略了 {}
,就會有一個隱含的 return
出現在運算式前面,如果沒有省略 {}
,運算式將會如實呈現。1
2
3
4
5
6const add = (x, y) => x + y
function add(x, y){
return x + y
}
//沒加 {} 等於 return x + y
1 | const add = (x, y) => {x + y} |
如果你只有一個參數,你甚至可以省略參數的圓括號1
2
3
4const add = (x) => x + 5
const add = x => x + 5
//省略圓括號
關於參數的圓括號
- 如果只有一個參數,圓括號可省略
- 如果沒有參數,或是有兩個以上的參數,圓括號一定要加
1 | const sayHi = () => 'Hello, World!' |
如果 return 的是一個 object,花括號 {}
外面要加圓括號 ()
1
const family = (father, mother) => ({father: father, mother: mother})
綁定 this
傳統函式的 this 是動態的,會依呼叫的方法而決定 this。箭頭函式的 this 是看何時定義。1
2
3
4
5
6
7
8
9
10var ooo = {
aaa: function(){
console.log(this)
},
bbb: () => {
console.log(this)
}
};
ooo.aaa() // {aaa:f, bbb: f}
ooo.bbb() // window
參考連結:
React 16 - The Complete Guide
MDN - 箭頭函式
ES6篇 - 箭頭函式
ECMAScript 6 入门
鐵人賽:箭頭函式 (Arrow functions)
Arrow Functions in JavaScript
ES6 箭頭函數 Arrow Function
深入探討 TypeScript 之 Arrow Function