实现一个sum函数
# 实现一个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
1
2
3
4
2
3
4
分析
仔细观察这几种调用方式可以得到以下信息
- sum 函数可以传递一个或者多个参数
- sum 函数调用后返回的是一个新的函数且参数可传递一个或者多个
- 调用 .valueOf 时完成最后计算
const sum = (...args1) => {
let fullArgs = [...args1];
const fn = (...args2) => {
// 收集参数
fullArgs = [...fullArgs, ...args2];
// 返回自身保持链式调用
return fn;
};
// 重写valueOf, 累加已收集的集数
fn.valueOf = () => {
return fullArgs.reduce((total, cur) => (total+=cur), 0);
};
return fn;
}
console.log(sum(1, 2, 3).valueOf()); // 6
console.log(sum(2, 3)(2).valueOf()); // 7
console.log(sum(1)(2)(3)(4).valueOf()); // 10
console.log(sum(2)(4, 1)(2).valueOf()); // 9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22