柯里化(curry)函数是一种把函数的元降维的技术,这个名词是为了纪念数学家阿隆佐·邱奇。
function add(a, b) {
return a + b;
}
function curry(add) {
let arr = [];
return function reply() {
let arg = […arguments];
arr = arr.concat(arg);
if (arg.length == 0) {
return arr.reduce((p, c) => (p = add(p, c)), 0);
} else {
return reply;
}
};
}
let sum = curry(add);
console.log(sum(1, 2, 3)()); // 6
console.log(sum(2, 3)(1)()); //12柯里化函数帮助我们把一个多元函数变成一个不完全调用,利用 Closure 的魔法,把函数调用变成延迟的偏函数(不完全调用函数)调用。这在函数组合、复用等场景非常有用。比如:

虽然你可以用其他闭包方式来实现函数的延迟调用,但 Curry 函数绝对是其中形式最美的几种方式之一。(没 get 到,但还是记一下 说不定之后 get 到了