今天來談一下箭頭函數, es6的新特性
首先我們來看下箭頭函數長什么樣子,
let result = (param1, param2) => param1+param2;
上述代碼 按照以前書寫應該是 :
function add(param1, param2){ return param1+param2; }
當 只有一個參數時,還可以簡寫為:
let result = v => 5+v;
箭頭函數不支持 arguments
當有多個參數時,比如10個參數時, 我們就不能用arguments了,一種方法是 一一列舉出來,比較繁瑣, 還有一種方法是 用剩余參數表示 如下:
這里先解釋一下 ” 剩余參數 “, MDN這樣描述: 如果函數的最后一個命名參數以...為前綴,則在函數被調用時,該形參會成為一個數組,數組中的元素都是傳遞給該函數的多出來的實參的值。
(param1, param2, ...rest)=>{//code} //...rest類型為數組,不包含param1,param2, rest.length表示剩余參數個數
arg代表的是 數組[3,6,5]
之前沒用箭頭函數寫promise時,代碼如下
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;}) }
用箭頭函數簡化后,
function getUserRankData(){ return getUsers(users) .then(users => users[1];) .then(user => user.id) .then(id => data) .then(err => err.msg;); }
當沒有參數時, 箭頭函數 () => {//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的數組。