我正在尝试找到closure
的一般解决方案,请参阅下面的示例。
function sum(b){
return function(a){
return a+b;
}
}
console.log(sum(2)(3));
它正确地给出了输出5
。但是如果我有这个总和(2)(3)(4)...(100)次。我该如何解决这个问题?
如何在javascript中查找总和 的总和(2)(3)(4)...(100) 感谢
答案 0 :(得分:3)
代码:
function sum(v) {
var f = function(b) {
f.result += b;
return f;
}
f.toString = function() { return this.result; };
f.result = v;
return f;
}
console.log(sum(2)(3)(4).result);
console.log(sum(2)(3)(4) + 100);
输出:
9
109
解释:我们创建一个函数对象f
,如果我们调用f(123)
,它会将123
添加到其间隔值f.result
并返回自己进行下一次调用。 f.toString
用于类型转换。
答案 1 :(得分:0)
https://gist.github.com/maniart/25a7a0939d0958c422c7
function sum(fn) {
var args = [], fn;
function exec() {
return args.reduce(function(prev, curr) {
return fn && fn.call(null, prev, curr);
});
}
function addArg(arg) {
if(arg) {
args.push(arg);
return addArg;
} else {
return exec();
}
}
if(arguments.length < 1) {
return sum;
} else {
fn = arguments[0];
return addArg;
}
}
//Sample use case:
function add(num1, num2) {
return num1 + num2;
}
sum(add)(2)(3)(5)(8)(22)(230)(100)(10)();