Pow*_*Pow 2 javascript recursion closures
我遇到了这个有趣的问题.编写一个javascript函数,通过对同一函数的多次调用,返回传递给它的所有参数的总和.
以下是可以调用函数的方法 -
sum(1, 2, 3, 4);
sum(1, 2)(3, 4);
sum(1, 2)(3)(4);
sum(1, 2, 3)(4);
sum(1)(2, 3, 4);Run Code Online (Sandbox Code Playgroud)
上面的所有调用都应该工作并返回10.
这是我到目前为止所写的内容,但它仅适用于前两个函数调用sum(1, 2, 3, 4),sum(1, 2)(3, 4)并且为其余部分调整了床.
const arr = [];
function sum(...args) {
if (args.length === 4) {
return args.reduce((acc, curr) => {
return (acc = acc + curr);
}, 0);
} else {
arr.push(...args);
return function(...args) {
arr.push(...args);
return sum(...arr);
};
}
}Run Code Online (Sandbox Code Playgroud)
有人请帮助我,这让我疯了.
谢谢!
你很亲密..bind如果你还没有给出至少四个参数,那么这是一个使用该方法返回捕获第一个参数的函数的绝佳机会.
所以类似于:
function sum(...args) {
if (args.length >= 4) {
return args.reduce((acc, curr) => {
return (acc = acc + curr);
}, 0);
} else {
// Bind the arguments you have to this function, and return it:
return sum.bind(null, ...args)
}
}
console.log(sum(1, 2, 3, 4));
console.log(sum(1, 2)(3, 4));
console.log(sum(1, 2)(3)(4));
console.log(sum(1, 2, 3)(4));
console.log(sum(1)(2, 3, 4));Run Code Online (Sandbox Code Playgroud)
最后,我会改变条件来检查,>= 4以便传递更多不会导致你永远咖喱的情况.
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |