javascript 柯里化curry詳解

2021-09-11 17:40:35 字數 1073 閱讀 2477

面試題:實現add(1)(2)(3) //結果 = 6,題的核心就是問的js的柯里化

先說說什麼是柯里化,看過許多關於柯里化的文章,始終搞不太清楚,例如:柯里化(currying)是把接受多個引數的函式變換成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回接受餘下的引數且返回結果的新函式的技術。大多數的blog都是這種說法,說實話我是懵逼的。我的理解是,curry是乙個收集引數的方法,收集夠了去執行函式。

實現前我們先列一下要點 1、收集引數(就像面試題多次執行多個引數)是的利用閉包 2、每次執行引數有多有少例如add(1)(2,3)(4) 3、我們需要知道什麼時候引數夠了

//如題

//add(1)(2)(3)

//邏輯應該是這樣add(1)執行收集引數1繼續執行收集引數2依次類推直到收集完畢。

function curry(fn)

// 引數沒有收集完我們需要繼續收集,遞迴

return arguments.callee}}

// 測試一下

lettestadd = curry(add1)

// console.log(testadd(1)(2)(3))

// console.log(testadd(1, 2)(3))

3))

複製**

一不小心寫完了!

不過不能標題黨,說好的詳解,接下來我們解析一下網上大多數柯里化的實現**

function curry(fn) ;

} return _c(fn.length, );

}複製**

再來乙個例子:bind方法實現

function.prototype.bind = function(context) 

}// 搞定測試

let fn = person.say.bind(person1)

fn()

fn(18)

複製**

是的bind方法就是用的柯里化,bind實現詳情請移步:segmentfault.com/a/119000001…

javascript中的函式柯里化

函式柯里化是將接受多個引數的函式轉換成可以接受乙個引數的函式,且轉換後的函式能夠處理剩餘引數並返回執行結果。以下 是對乙個求和函式進行柯里化處理後的效果 接受多個引數的函式 function add a,b,c 經過柯里化處理後生成函式 add var add curry add add可以接受乙個...

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...