js柯里化的乙個應用

2022-07-18 01:48:08 字數 745 閱讀 8457

聽到同學說面試一道題目

add(1)(2)(3)(4);//

10

查詢了下資料  這是乙個js裡面的柯里化 現象

add_curry防範返回的是乙個 retval,並不是執行結果。這裡的**很想遞迴,但是不是這樣。

每呼叫一次retval 都會將引數傳給他, 而之前的seed會一直保留(add_curry 營造了乙個閉包,seed得以一直儲存)。

1

function

add_curry( seed )

9 retval.tostring = function

() 12

return

retval;

1314}15

16 console.log(add_curry(1)(2)(3)(4));

17//

我們看console.log列印結果

18a1

19b1

20b2

21a3

22b3

23b3

24a6

25b6

26b4

27a10

28 10

add_curry(1)(2)(3)(4) 的呼叫過程是:add_curry(1) -> ret(2) ->add_curry(3) -> ret(3) ->add_curry(6) -> ret(4) ->add_curry(10);

js反柯里化

反柯里化主要是借用別人的函式,比如類陣列沒有push函式,但是可以借用push函式,push 呼叫的時候,push裡面的this值是,但是arguments.push 是不行的,因為arguments沒有這個方法,那怎麼辦呢,反柯里化就是要修改裡面的this值,所謂的this泛化,讓this程式設計...

js函式柯里化

什麼是函式柯里化?在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。這個技術由 christopher strachey 以邏輯學家 haskell curry 命名的,儘管它是 mos...

js 函式柯里化

函式柯里化的主要目的就是為了減少函式傳參,同時將一些固定引數私有化。下面展示一段非常簡單計算圓面積的 來說明函式柯里化的原理 circle函式,接受半徑r和 function circle r,p 通過函式柯里化來簡化circle函式,只傳入半徑就能計算出面積 不管怎麼樣,是不會變的,因此我們將他寫...