实现一个无限累加的 sum 函数
实现一个 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
可以这样
function sum(...args) {
// allArgs 收集所有的 args
let allArgs = args;
// 返回一个 function 可以接受参数
function fn(...args2) {
allArgs = allArgs.concat(args2);
return fn;
}
// function 上有一个属性叫 valueOf
fn.valueOf = function () {
// valueOf 触发时才开始累加
return allArgs.reduce((res, cur) => (res += cur));
};
return fn;
}
简化一下
function sum(...args) {
const f = (...rest) => sum(...args, ...rest);
f.valueOf = () => args.reduce((x, y) => x + y, 0);
return f;
}

浙公网安备 33010602011771号