fn(1, 2, 3)(4, 5, 6)(7)(8)拿到总和的几种方法
时间: 2023-10-08 15:09:01 浏览: 37
这个函数的调用方式比较特殊,每次调用都会返回一个新的函数,而这个新函数可以继续接收参数。所以我们可以通过以下几种方式来计算总和:
1. 使用递归调用:每次调用函数时将前面的参数累加起来,直到最后一个函数调用时将所有参数累加起来返回。代码如下:
```
function fn(...args) {
let sum = args.reduce((acc, cur) => acc + cur, 0);
const inner = (...innerArgs) => {
sum += innerArgs.reduce((acc, cur) => acc + cur, 0);
return inner;
};
inner.valueOf = () => sum;
return inner;
}
const result = fn(1, 2, 3)(4, 5, 6)(7)(8);
console.log(result.valueOf()); // 36
```
2. 使用闭包:每次调用函数时将前面的参数累加起来,最后一个函数调用时返回累加器的值。代码如下:
```
function fn(...args) {
let sum = args.reduce((acc, cur) => acc + cur, 0);
const inner = (...innerArgs) => {
sum += innerArgs.reduce((acc, cur) => acc + cur, 0);
return inner;
};
return () => sum;
}
const result = fn(1, 2, 3)(4, 5, 6)(7)(8);
console.log(result()); // 36
```
3. 使用 valueOf() 方法:每次调用函数时将前面的参数累加起来,最后一个函数调用时将累加器返回。代码如下:
```
function fn(...args) {
let sum = args.reduce((acc, cur) => acc + cur, 0);
const inner = (...innerArgs) => {
sum += innerArgs.reduce((acc, cur) => acc + cur, 0);
return inner;
};
inner.valueOf = () => sum;
return inner;
}
const result = fn(1, 2, 3)(4, 5, 6)(7)(8);
console.log(result.valueOf()); // 36
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)