js函式柯里化

2021-08-21 05:58:25 字數 1404 閱讀 5647

什麼是函式柯里化?

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

在直覺上,柯里化聲稱「如果你固定某些引數,你將得到接受餘下引數的乙個函式」。所以對於有兩個變數的函式y,x,如果固定了 y = 2,則得到有乙個變數的函式 2,x。

舉個例子:

function multi(a,b)
這是乙個求兩個數字的乘積的簡單函式,每次呼叫時需要傳入兩個引數,但是如果我要求5的倍數,每次要重複輸入

multi(5,1);

multi(5,2);

...

發現,這個5,是否可以不用每次輸入呢?改造一下這個函式

function multinum(a);

}

var multifive = multinum(5);

multifive(3); //返回15

通過對multi函式的包裝,只要呼叫multifive,傳入乙個引數就可以實現5的乘積。

這裡的multifive函式就是柯里化multi後的函式。

通用表示式:

function currying(fn)

}

這裡的currying函式就是柯里化的通用表示式。柯里化一下之前的multi函式:
var currymulti = currying(multi,5);

currymulti(3); //返回15

柯里化作用

1.提高適用性,引數復用

上面的currymulti例子可以看出,柯里化multi之後,只需要傳入乙個引數就可以實現5的倍數。

2.延遲計算

下面是乙個求和的函式:

var add = function()

return sum;

}

下面是乙個延遲執行的柯里化函式:

var currydelay=function(fn)else 

} }

對add函式進行柯里化:

currydelay(add,3,4,5,6)(); //返回18
通過柯里化函式後,currydelay只在引數為空時才會執行,返回執行結果。

js 函式柯里化

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

js 函式柯里化

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

js函式柯里化

題目描述 實現函式 functionfunction,呼叫之後滿足如下條件 1 返回值為乙個函式 f 2 呼叫返回的函式 f,返回值為按照呼叫順序的引數拼接,拼接字元為英文逗號加乙個空格,即 3 所有函式的引數數量為 1,且均為 string 型別 示例1輸入 functionfunction he...