首先咱們來看下箭頭函數長什麼樣子, javascript
let result = (param1, param2) => param1+param2;
上述代碼 按照之前書寫應該是 :java
function add(param1, param2){ return param1+param2; }
當 只有一個參數時,還能夠簡寫爲:es6
let result = v => 5+v;
當有多個參數時,好比10個參數時, 咱們就不能用arguments了,一種方法是 一一列舉出來,比較繁瑣, 還有一種方法是 用剩餘參數表示 以下:數組
這裏先解釋一下 」 剩餘參數 「, MDN這樣描述: 若是函數的最後一個命名參數以...爲前綴,則在函數被調用時,該形參會成爲一個數組,數組中的元素都是傳遞給該函數的多出來的實參的值。promise
(param1, param2, ...rest)=>{//code} //...rest類型爲數組,不包含param1,param2, rest.length表示剩餘參數個數
arg表明的是 數組[3,6,5]函數
以前沒用箭頭函數寫promise時,代碼以下this
function getRankData(){ return getUsers(users) .then(function(users){return users[1];}) .then(function(user){return user.id;}) .then(function(id){return data;}) .catch(function(err){return err.msg;}) }
用箭頭函數簡化後,rest
function getUserRankData(){ return getUsers(users) .then(users => users[1];) .then(user => user.id) .then(id => data) .then(err => err.msg;); }
當沒有參數時, 箭頭函數 () => {//code} 或者 _ => {//code}code
note: 簡單的、單行的、不會複用的函數,建議採用箭頭函數。若是函數體較爲複雜,行數較多,仍是應該採用傳統的函數寫法。對象
當 用箭頭函數直接返回一個對象的時候 ()=>{name: 'test'} 會報錯 , 須要添加一個括號, () => ({name: 'test'});
this 關鍵字
箭頭函數內部的this
是詞法做用域,由上下文肯定。
看到箭頭函數 常常和高階函數一塊兒使用, 以下
高階函數有兩個特性 : 函數能夠做爲參數傳遞, 函數能夠做爲返回值輸出
var arr = [1,3,5,2,0]; var num = arr.map(ele => ele + 1) .filter(ele => ele > 3) .reduce((acc, ele) => acc + ele, 0)
結果爲10;
介紹一下 reduce函數,對數組每一個元素執行回調函數,返回值用於下一次計算參數,
reduce(function(a,b,c,d) , 0); reduce 有兩個參數 一個回調函數,一個參數, 當參數存在時, 即爲a 的初始值, 以後a爲回調返回的值, b爲數組當前的元素, c爲當前元素序號值, d爲調用reduce的數組。