本题摘自于我 github 上的面试每日一题:github.com/shfshanyue/…,可内推。
如何实现一个 sum 函数,执行如下?
sum(1, 2, 3).valueOf() //6
sum(2, 3)(2).valueOf() //7
sum(1)(2)(3)(4).valueOf() //10
sum(2)(4, 1)(2).valueOf() //9
sum(1)(2)(3)(4)(5)(6).valueOf() // 21
这是一个关于懒计算的函数,使用 sum
收集所有累加项,使用 valueOf
进行计算
- sum 返回一个函数,收集所有的累加项,使用递归实现
- 返回函数带有
valueOf
属性,用于统一计算
function sum (...args) {
const f = (...rest) => sum(...args, ...rest)
f.valueOf = () => args.reduce((x, y) => x + y, 0)
return f
}