实现add(1,2,3),add(1)(2,3),add(1)(2)(3)

这里涉及的主要是柯里化。

const curry = (fn, ...args) => {
  //fn就是addCurry,fn.length就是3对应x,y,z
  //args.length就是add传入的参数长度,第一次是add(1),即1
  // 1<3所以继续柯里化,传入(2,3)此时args为(1,2,3)直接执行fn,即(addCurry(1,2,3))
  return args.length >= fn.length ?
    fn(...args) :
    (..._args) => curry(fn, ...args, ..._args);
}

function addCurry(x, y, z) {
  return x + y + z;
}

const add = curry(addCurry);
console.log(add(1)(2, 3)); //6
原文地址:https://www.cnblogs.com/userGao/p/14148645.html