# JavaScript -箭頭函式
###### tags: `javascript` `箭頭函式` `hoisting` `map`
## 函式陳述式與函式表達式差異
### 函式陳述式
* 具 hoisting 效果,可於宣告前或宣告後執行該函式。
```javascript=
// 函式陳述式
function numA(x){
return x * x;
}
console.log(numA(3)); //9
```
### 函式表達式
* 賦予一個"變數"為 function。
* 不具 hoisting 效果,若於宣告前執行該函式程式會出錯。
```javascript=
// 函式表達式 (賦予一個"變數"為 function)
const numB = function(x){
return x * x;
}
console.log(numB(3)); //9
```
## 箭頭函式
### 基本寫法
* 函式表達式的簡化版:去掉 function,改寫為 =>
```javascript=
const numA = (x) => {
return x * x;
}
console.log(numA(3)); //9
```
* 可代入多個參數
```javascript=
const numB = (x, y) => {
let a = 1;
let b = 2;
return a*b*x*y;
}
console.log(numB(1,3)); //6
```
### 縮寫寫法
* point1. 如果函式內容有搭配 return,可省略大括號 {} 與 return
```javascript=
const numA = (x) => `數字相乘 ${x*x}`;
console.log(numA(4)); //16
// 原本基本寫法
const num = (x) => {
return `數字相乘 ${x*x}`;
}
console.log(num(2)); //4
```
* point2. 如果只有一個參數,可以省略小括號 ()
```javascript=
const numB = x => `數字相乘 ${x*x}`;
console.log(numB(3)); //9
```
* point3. 沒有參數,還是要寫小括號 () 才行!
```javascript=
const numC = () => `數字為 ${0}`;
console.log(numC());
```
* point4. 如果多個參數,要寫小括號 ()
```javascript=
const numD = (x,y) => `數字相乘 ${x*y}`;
console.log(numD(2,3)); //6
```
### 陣列操作 map、filter 搭配箭頭函式寫法
#### Array.map()陣列處理方法
* 函式表達式
```javascript=
// 函式表達式
const newData = data.map(function(item){
return item + 2;
})
console.log(newData);
// [4, 6, 8, 10, 12]
```
* 箭頭函式精簡寫法
```javascript=
// 箭頭函式精簡寫法
const newData = data.map(item => item + 2);
console.log(newData);
// [4, 6, 8, 10, 12]
```
* [Day13【ES6 小筆記】Array.map() - 處理陣列最佳選擇](https://ithelp.ithome.com.tw/articles/10215281)