你需要的是高阶函数curry,如果你想添加你需要重写添加功能两个以上的参数,将返回另一个功能
function add(a,b) {
return a + b;
}
function curry(fun) {
var args = [].slice.call(arguments);
args.shift();
return function() {
return fun.apply(null, args.concat([].slice(arguments)));
};
}
x = curry(add, 10, 20);
x();
的功能,你可以遍历或使用其他更高顺序功能降低。
function add() {
[].slice.call(null, arguments).reduce(function(a, b) { return a+b; });
}
或者您可以使用@PaulS。解决方案使用减少你的foo函数来调用它多于一个参数:
function foo(fun) {
var args = [].slice.call(arguments);
args.shift();
return function() {
return args.concat([].slice.call(arguments)).reduce(fun);
};
};
var x = foo(add, 10, 20, 30);
x(30);
你想做什么?什么是'foo'? 'arg1' *是一个变量,它也是一个函数。什么是'arg2'和'arg3'?你能再解释一下吗?什么有效,不起作用?您想做什么?这是做什么的? –
@RocketHazmat他希望'x'是一个函数,他没有'foo',所以他想要一个更高阶的函数。 – jcubic
试图更详细地解释。 – user54264