4.实现一个sum函数
webVueBlog opened this issue · comments
I am ne zha / Jeskson commented
- sum函数可以传递一个或者多个参数
- sum函数调用后返回的是一个新的函数且参数可传递一个或者多个
- 调用.valueOf时完成最后计算
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
const sum = () => {
let args = [...arguments];
const func = () => {
args = [...args, ...arguments];
return func;
}
func.valueOf = () => args.reduce((cur, prev) => cur + prev);
return func;
}
const sum = (...args1) => {
const fullArgs = [...args1];
const fn = (...args2) => {
// 收集参数
fullArgs.push(...args2)
// 返回自身保持链式调用
return fn;
};
// 重写valueOf,累加已收集的参数
fn.valueOf = () => fullArgs.reduce((total, cur) => total + cur)
return fn;
};