柯里化(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 到了