题目:
add(1)(2)(3) = 6
add(1,2,3)(4) = 10
add(1)(2)(3)(4)(5) = 15
// 定义一个sum函数
function sum() {
// 创建一个数组保存第一次传进来的参数
let arr = Array.from(arguments)
// 定义一个函数,sum函数执行完后返回,确保可以第二次使用小括号调用
const execute = function () {
arr.push(...arguments)
// 函数中回调,确保可以连续调用
return execute
}
// 因为execute函数中已经return所以我们利用execute在输出时会调用toString,
//然后对toString进行替换,返回累加和
execute.toString = function () {
const res = arr.reduce((a, b) => {
return a + b
})
return res
}
return execute
}
// 因为最后的结果是一个函数,所以要进行转换
const res1 = +sum(1)(2)(3)
const res2 = +sum(1, 2, 3)(4)
const res3 = +sum(1)(2)(3)(4)(5)
console.log(res1)
console.log(res2)
console.log(res3)
完