方法1:支持getSum(1)(2)(3)(4)(5)调用:
function getSum(num) {
// 使用递归做累加
const caller = (sum) => getSum(num + sum);
caller.valueOf = caller.toString = () => num
return caller;
}
console.log(getSum2(1)(2)(3)(4)(5))
方法2:既支持getSum2(1)(2)(3)(4)(5)也支持getSum2(1, 2, 3)(4)(5)式调用:
function getSum2() {
// 将第一次调用的参数专为数组,然后用来存后续参数的传入,使用闭包的特性
const arr = Array.from(arguments);
// 定义一个累加函数,每次累加后续传入的数,然后返回本身实现链式调用
function add() {
arr.push(...arguments)
return add
}
// 重写valueof和toString方法,使用返回值的时候直接返回累加结果
add.valueOf = add.toString = () => arr.reduce((prev, curr) => {
prev += curr;
return prev
}, 0)
// 返回累加函数
return add;
}
console.log(getSum2(1)(2)(3)(4)(5))
console.log(getSum2(1, 2, 3)(4)(5))