---
tags: Javascript
---
# JS箭頭函式筆記
箭頭函式比普通函式還要簡短,但是她沒有自己的`this`、`arguments`、`super`、`new.target`
等語法,也不能被用做建構式(constructor)
## MDN範例基本語法
```javascript=
(參數1, 參數2, …, 參數N) => { 陳述式; }
(參數1, 參數2, …, 參數N) => 表示式;
// 等相同(參數1, 參數2, …, 參數N) => { return 表示式; }
// 只有一個參數時,括號才能不加:
(單一參數) => { 陳述式; }
單一參數 => { 陳述式; }
//若無參數,就一定要加括號:
() => { statements }
```
## MDN範例進階語法
```javascript=
// 用大括號將內容括起來,返回一個物件字面值表示法:
params => ({foo: bar})
// 支援其餘參數與預設參數
(param1, param2, ...rest) => { statements }
(param1 = defaultValue1, param2, …, paramN = defaultValueN) => {
statements }
// 也支援 parameter list 的解構
var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c; f(); // 6
```
## 箭頭函式如何使用arguments
原本函式
```javascript=
function average() {
const nums = Array.from(arguments);
const total = nums.reduce(function(acc, val) {
return acc + val;
}, 0)
return total / nums.length;
}
console.log(average(1, 2, 3, 4, 5, 6, 7));
```
改成箭頭函式,使用`...arguments`再加上參數
```javascript=
const average = (...num) => num.reduce((acc, val) => acc + val, 0) / num.length;
console.log(average(1, 2, 3, 4, 5, 6, 7));
```
## 箭頭函式this
利用箭頭函式沒有`this`特性在物件內用法
普通函式寫法
```javascript=
const food = {
data: {
},
getData: {
const self = this;
$.ajax({
url: 'https://your.self.api',
dataType: json,
success: function(data) {
console.log(data);
self.data = data.results[0];
console.log(`food: ${food.data}`);
}
})
}
}
food.getData();
```
改成箭頭函式
```javascript=
const food = {
data: {
},
getData: {
$.ajax({
url: 'https://your.self.api',
dataType: json,
success: (data) => {
console.log(data);
this.data = data.results[0];
console.log(`food: ${food.data}`);
}
})
}
}
food.getData();
```