高階函數(shù)與ES6多箭頭函數(shù)(柯里化)

在閱讀react的部分源碼時,逐漸接觸了許多高階函數(shù)和多箭頭函數(shù),想把知識點(diǎn)整理一下

1.高階函數(shù)

所謂高階函數(shù),就是一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),或者是返回一個函數(shù)。

例如:

javascript

var ADD =function add(a) {

return function(b) {

? return a+b

? }

? }

? 調(diào)用:ADD(2)(3)即可獲得結(jié)果


常見的高階函數(shù)有map、reduce、filter、sort等

(1) map

map接受一個函數(shù)作為參數(shù),不改變原來的數(shù)組,只是返回一個全新的數(shù)組

? var arr = [1,2,3,4,5]

? var arr1 = arr.map(item => item = 2)// 輸出[1,1,1,1,1]

?(2) reduce

reduce也是返回一個全新的數(shù)組。reduce接受一個函數(shù)作為參數(shù),這個函數(shù)要有兩個形參,代表數(shù)組中的前兩項(xiàng),reduce會將這個函數(shù)的結(jié)果與數(shù)組中的第三項(xiàng)再次組成這個函數(shù)的兩個形參以此類推進(jìn)行累積操作


? var arr = [1,2,3,4,5]

? var arr2 = arr.reduce((a,b)=> a+b)

? console.log(arr2) // 15


(3)filter

filter返回過濾后的數(shù)組。filter也接收一個函數(shù)作為參數(shù),這個函數(shù)將作用于數(shù)組中的每個元素,根據(jù)該函數(shù)每次執(zhí)行后返回的布爾值來保留結(jié)果,如果是true就保留,如果是false就過濾掉(**這點(diǎn)與map要區(qū)分**)


? var arr = [1,2,3,4,5]

? var arr3 = arr.filter(item => item % 2 == 0)

? console.log(arr3)// [2,4]


(4)sort

實(shí)現(xiàn)對數(shù)組中每項(xiàng)按照ASCII碼大小進(jìn)行排序

## ES6多箭頭函數(shù)實(shí)現(xiàn)高階函數(shù)

所謂多箭頭函數(shù)

指的是如下形式:


(a)=>(b)=>(c)=>{}

等價于

function(a) {

return function(b) {

? return function(c) {

? .....

? }

}

}

2.多箭頭函數(shù)

根據(jù)所查資料得到的結(jié)論是:多個連續(xù)箭頭函數(shù)就是 es6的多次柯里化的寫法

而所謂柯里化指的是:把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)的函數(shù),并且返回(接受余下的參數(shù)而且返回結(jié)果的)新函數(shù)的技術(shù)

=>n 個連續(xù)箭頭組成的函數(shù)實(shí)際上就是柯里化了 n - 1次。前 n - 1 次調(diào)用,其實(shí)是提前將參數(shù)傳遞進(jìn)去,并沒有調(diào)用最內(nèi)層函數(shù)體,最后一次調(diào)用才會調(diào)用最內(nèi)層函數(shù)體,并返回最內(nèi)層函數(shù)體的返回值。然后依次向外層函數(shù)執(zhí)行

舉例:

funcs.reduce((left, right) => (...args) => right(left(...args)));


關(guān)于柯里化的部分資料來源于:

https://www.cnblogs.com/xueandsi/p/6032578.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容