实现一个sum方法【sum(1, 2, 3)(4),sum(1, 2)(3, 4)类似的调用】,同时console.log(sum(1, 2, 3)(4) => //输出10
时间: 2023-09-12 08:02:50 浏览: 78
series-sum.zip_4 3 2 1_series求和
可以通过闭包实现这个功能,具体实现如下:
```javascript
function sum() {
let args = Array.prototype.slice.call(arguments); // 将参数转为数组
function innerSum() {
let innerArgs = Array.prototype.slice.call(arguments);
args = args.concat(innerArgs); // 将内部调用的参数拼接到外部的参数数组中
return innerSum; // 返回自身,以支持链式调用
}
innerSum.toString = function() {
return args.reduce((prev, curr) => prev + curr, 0); // 重写toString方法,返回参数数组的和
};
return innerSum; // 返回内部函数
}
console.log(sum(1, 2, 3)(4)); // 输出10
console.log(sum(1, 2)(3, 4)); // 输出10
```
在调用`sum`函数时,会返回一个内部函数`innerSum`,然后在调用`innerSum`函数时,会将内部函数的参数拼接到外部函数的参数数组中,最后通过重写`toString`方法,返回参数数组的和。因为`innerSum`函数返回的是自身,所以可以支持链式调用。
阅读全文