函数Javascript中的函数

时间:2013-08-22 20:19:44

标签: javascript function variables

任务:写一个函数foo。

function arg1(a,b) {
    return a + b;
}
var x = foo(arg1, arg2);
x(arg3); // return arg2 + arg3
var y = foo(arg1, arg2, arg3);
y(); // return arg2 + arg3 

我无法理解起初var x, y - 数字(因为arg1()返回数字),然后是x, y - 函数。怎么可能?

1 个答案:

答案 0 :(得分:2)

你想要的是高阶函数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();

如果你想添加两个以上需要重写add函数的参数,你可以迭代或使用另一个更高阶函数reduce。

function add() {
   [].slice.call(null, arguments).reduce(function(a, b) { return a+b; });
}

或者您可以使用@PaulS。在你的foo函数中使用reduce的解决方案将它调用到多个参数:

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);