--- 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(); ```