函数柯理化

// add的参数不固定,看有几个数字累计相加
function add(a, b, c, d) {
  return a + b + c + d;
}

function curry(fn, ...args) {
  return function (...innerArgs) {
    const finalArgs = args.concat(innerArgs);
    if (innerArgs.length === 0) {
      // 空参数时返回结果
      return fn(...finalArgs);
    }
    return curry(fn, ...finalArgs); // 继续收集参数
  };
}

let fn1 = currying(add, 1, 2); // 3
let fn2 = fn1(3); // 6
let fn3 = fn2(4); // 10

最后更新于

这有帮助吗?