摘要:于是開始各種搜索,先是知道了多個(gè)連續(xù)箭頭函數(shù)就是的多次柯里化的寫法,對(duì)于函數(shù)柯里化,很久以前就知道這個(gè)名次,但是并不理解,也沒有去了解??梢詫?duì)一個(gè)連續(xù)的箭頭函數(shù)進(jìn)行多次柯里化。
前言:第一次看到多個(gè)連續(xù)箭頭函數(shù)是在一個(gè) react 項(xiàng)目中,然鵝確認(rèn)了下眼神,并不是對(duì)的人,因?yàn)榭吹靡荒樸卤?。em......于是開始各種搜索,先是知道了多個(gè)連續(xù)箭頭函數(shù)就是 es6 的多次柯里化的寫法,對(duì)于函數(shù)柯里化,很久以前就知道這個(gè)名次,但是并不理解,也沒有去了解。為了弄明白多個(gè)連續(xù)箭頭函數(shù),開始了簡(jiǎn)化之路。
首先看到了這樣的一個(gè)例子:
let add = a => b => a + b
以上是一個(gè)很簡(jiǎn)單的相加函數(shù),把它轉(zhuǎn)化成 ES5 的寫法如下:
let add = function(a) { return function(b) { return a + b; } }
再簡(jiǎn)化一下,可以寫成如下形式:
let add = function(a) { var param = a; var innerFun = function(b) { return param + b; } return innerFun; }
雖然好像沒什么意義,但是很顯然上述使用了閉包,而且該函數(shù)的返回值是一個(gè)函數(shù)。其實(shí),這就是高階函數(shù)的定義:以函數(shù)為參數(shù)或者返回值是函數(shù)的函數(shù)。
那么,這跟柯里化有什么關(guān)系呢?
再來(lái)看一下 wiki 里面對(duì)柯里化的定義:把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)的函數(shù),并且返回(接受余下的參數(shù)而且返回結(jié)果的)新函數(shù)的技術(shù)。可以對(duì)一個(gè)連續(xù)的箭頭函數(shù)進(jìn)行多次柯里化。n 個(gè)連續(xù)箭頭組成的函數(shù)實(shí)際上就是柯里化了 n - 1 次,而前 n - 1 次調(diào)用,其實(shí)是提前將參數(shù)傳遞進(jìn)去,并沒有調(diào)用最內(nèi)層函數(shù)體,最后一次調(diào)用才會(huì)調(diào)用最內(nèi)層函數(shù)體,并返回最內(nèi)層函數(shù)體的返回值。
如果把函數(shù)柯里化和閉包聯(lián)系在一起,就比較好理解了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99897.html
摘要:與反柯里化什么是柯里化與反柯里化純函數(shù)函數(shù)結(jié)果只受傳入?yún)?shù)影響,參數(shù)一定,結(jié)果一定。寫法柯里化接受一次性傳入多個(gè)參數(shù)調(diào)用的函數(shù),也可以傳入部分參數(shù)調(diào)用,最后使它返回一個(gè)單一參數(shù)的函數(shù)去處理,并且返回。 call與apply反柯里化? 什么是柯里化與反柯里化?純函數(shù)函數(shù)結(jié)果只受傳入?yún)?shù)影響,參數(shù)一定,結(jié)果一定。高階函數(shù)一個(gè)函數(shù)可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱為高階函數(shù)。 funct...
摘要:柯里化通用式上面的柯里化函數(shù)沒涉及到高階函數(shù),也不具備通用性,無(wú)法轉(zhuǎn)換形參個(gè)數(shù)任意或未知的函數(shù),我們接下來(lái)封裝一個(gè)通用的柯里化轉(zhuǎn)換函數(shù),可以將任意函數(shù)轉(zhuǎn)換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數(shù)的一種應(yīng)用,在這之前...
摘要:高階函數(shù)函數(shù)式編程中,接受函數(shù)作為參數(shù),或者返回一個(gè)函數(shù)作為結(jié)果的函數(shù)通常就被稱為高階函數(shù)。均屬于高階函數(shù),高階函數(shù)并不神秘,我們?nèi)粘>幊桃矔?huì)用到。參考演算函數(shù)式編程指南入門康托爾哥德爾圖靈永恒的金色對(duì)角線原文函數(shù)與演算 緣起 造了一個(gè)輪子,根據(jù)GitHub項(xiàng)目地址,生成項(xiàng)目目錄樹,直觀的展現(xiàn)項(xiàng)目結(jié)構(gòu),以便于介紹項(xiàng)目。歡迎Star。 repository-tree 技術(shù)棧: ES6 ...
摘要:函數(shù)柯里化是把支持多個(gè)參數(shù)的函數(shù)變成接收單一參數(shù)的函數(shù),并返回一個(gè)函數(shù)能接收處理剩余參數(shù),而反柯里化就是把參數(shù)全部釋放出來(lái)。但在一些復(fù)雜的業(yè)務(wù)邏輯封裝中,函數(shù)柯里化能夠?yàn)槲覀兲峁└玫膽?yīng)對(duì)方案,讓我們的函數(shù)更具自由度和靈活性。 showImg(https://segmentfault.com/img/bVburN1?w=800&h=600); 柯里化(Curring, 以邏輯學(xué)家Has...
摘要:引言上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說(shuō)明了使用高階函數(shù)和不使用高階函數(shù)的情況。我們期望函數(shù)輸出,但是實(shí)際上調(diào)用柯里化函數(shù)時(shí),所以調(diào)用時(shí)就已經(jīng)執(zhí)行并輸出了,而不是理想中的返回閉包函數(shù),所以后續(xù)調(diào)用將會(huì)報(bào)錯(cuò)。引言 上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說(shuō)明了使用高階函數(shù)和不使用高階函數(shù)的情況。后面幾部分將結(jié)合實(shí)際應(yīng)用場(chǎng)景介紹高階函數(shù)的應(yīng)用,本節(jié)先來(lái)聊聊函數(shù)柯里化,通過介紹其定義、比較常見的...
閱讀 3533·2023-04-25 19:42
閱讀 1545·2021-11-23 10:11
閱讀 2554·2021-11-16 11:51
閱讀 1745·2019-08-30 15:54
閱讀 2194·2019-08-29 18:44
閱讀 1807·2019-08-23 18:24
閱讀 633·2019-08-23 17:52
閱讀 1947·2019-08-23 15:33