Yasin

Yasin

柯里化实现add函数

// 实现一个add方法,使计算结果能够满足如下预期: // add(1)(2)(3) == 6 // true // add(1, 2, 3)(4) == 10 // true // add(1)(2)(3)(4)(5) == 15 // true

function add(...args) {
  let sum = args.reduce((a, b) => a + b, 0);

  function fn(...nextArgs) {
    sum += nextArgs.reduce((a, b) => a + b, 0);
    return fn;
  }

  fn.valueOf = () => sum;
  fn.toString = () => String(sum);
  fn[Symbol.toPrimitive] = () => sum;

  return fn;
}