什麼是函式柯里化?
在電腦科學中,柯里化(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...