正如我们大多数人所知,我们可以创建一个像这样的简单函数。
function calc(a,b){
return a+b
}
calc(1,1); //returns 2
我们也可以做这样的事情
function calc(a){
return function(b){
return a+b
}
}
calc(1)(1); //returns 2
如果我们有多个参数怎么办?
function calc() {
function r(arg) {
var a = [];
for(var i = 0, l = arg.length; i < l; i++){
a[i] = arg[i];
}
return a.reduce(function(p, c) {
return p + c;
});
}
var res = r(arguments);
return function() {
res += r(arguments);
return res;
}
}
这适用于 calc(1,2)(1)
,但不适用于 calc(1,2,1)
有没有办法结合两个版本?
这意味着当调用时
calc(1,1)
我们也可以调用 calc(1)(1)
并且两者仍然会返回 2。
或calc(1,2,3)
calc(1,2)(3)
calc(1)(2,3)
> 都会返回 6
最佳答案
它需要知道有多少个参数来进行计算;-)
你可以创建一个函数来将事情变成那种函数 像这样的东西:
function curry(f){
var args = [];
return addargs;
function addargs(){
args=args.concat([].slice.call(arguments));
return args.length<f.length? addargs.bind(this) : f.apply(this,args);
}
}
然后你可以做这样的事情:
var calc = curry(function(a,b,c){return a+b+c});
calc(1,2)(3); // = 6
但你不能让它接受可变数量的参数并柯里化(Currying)这些参数 - 它不知道何时返回答案
关于javascript - 具有多个参数的函数调用 2 种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834764/