最近看的Haskell提到這個。
stackoverflow有個回答比較簡單易懂。
Currying就是把一個帶有多個參數的函數拆分成一系列帶部分參數的函數。
看一下JavaScript中的例子:
function add (a, b) {
return a + b;
}
使用
add(3, 4); returns 7
這個函數有兩個參數a和b,返回它們的值。curry這個函數。
function add (a) {
return function (b) {
return a + b;
}
}
這回,這個函數只帶有一個參數,返回一個帶有參數b的函數,然後這個函數返回a,b的和。
add(3)(4);
var add3 = add(3);
add3(4);
第一句話返回7,和add(3, 4) 效果一樣。
第二句話定義了一個新函數add3,它的參數爲3(閉包),之後使用add3來加上4,同樣結果爲7。