看见了一个面试题,用 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
这是函数柯里化的应用,是一个比较高级的概念,目前我还只是认识的阶段,相信随着经验的累计会更深入的了解吧