实现一个柯里化的求和函数add

1,343 阅读1分钟

实现如下函数 add,不限制输入参数数量以及调用次数,要求在传参为空时输出计算结果

add(1,2,3)(1)(2)(3)(4,5,6)(7,8)() 其输出结果为 42

function sumValue(args) {
    return args.reduce((acc, cur) => {
        return acc + cur
    }, 0)
}

function add(...args) {
    let sum = sumValue(args)

    return function fn(...params) {
        if (params.length > 0) {
            sum += sumValue(params)
            return fn
        } else {
            return sum
        }
    }
}

let res = add(1, 2, 3)(1)(2)(3)(4, 5, 6)(7, 8)(10)()
console.log(res)