实现一个无限累加计算参数值的函数

看见了一个面试题,用 JS 实现一个无限累加的函数 add,示例如下:

sum(1).valueOf(); // 1
sum(1)(2).valueOf();  // 3
sum(1)(2)(3).valueOf(); // 6
sum(1)(2)(3)(4).valueOf(); // 10 

// 以此类推

具体的代码实现

function sum (...args) {
  const f = (...rest) => sum(...args, ...rest)
  f.valueOf = () => args.reduce((x, y) => x + y, 0)
  return f
}

sum(1).valueOf(); // 1
sum(1)(2).valueOf();  // 3
sum(1)(2)(3).valueOf(); // 6
sum(1)(2)(3)(4).valueOf(); // 10 

这是函数柯里化的应用,是一个比较高级的概念,目前我还只是认识的阶段,相信随着经验的累计会更深入的了解吧

你可能感兴趣的:(实现一个无限累加计算参数值的函数)