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