要实现一个 sum 函数来满足这些需求,我们可以利用闭包和函数链式调用的概念。
sum函数应该返回一个可链式调用的函数,累积所有传入参数。- 最后使用
sumOf()方法来计算并返回累积的和。
以下是代码的实现:
function sum(...args) {
// 内部保存所有参数
let total = args;
// 定义内部函数,接受额外参数并累加到总数
function innerSum(...newArgs) {
total = total.concat(newArgs);
return innerSum;
}
// 定义 sumOf 方法来计算总和
innerSum.sumOf = function() {
return total.reduce((acc, val) => acc + val, 0);
};
return innerSum;
}
测试示例
console.log(sum(1, 2).sumOf()); // 输出 3
console.log(sum(1, 2)(3).sumOf()); // 输出 6
console.log(sum(1)(2, 3, 4).sumOf()); // 输出 10
console.log(sum(1, 2)(3, 4)(5).sumOf()); // 输出 15
工作原理
sum函数在初次调用时接受一组参数并将其存储在total数组中。innerSum函数每次调用时会将新的参数追加到total数组中,并返回自身,允许链式调用。sumOf()方法调用时通过reduce将total中的所有数值累加起来并返回结果。