你怎么称一个函数接受一个值并返回一个返回该值的函数?

时间:2013-09-06 14:06:30

标签: javascript

我正在使用Lodash和compose尝试使用Javascript更具功能性的风格。我注意到我有时需要一个返回值的函数。所以想知道这是什么叫,所以我可以知道Lodash是否真的有这种方法。

var returnFn = function (i) {
  return function () {
    return i;
  };
};

示例:

_.compose(doSomething, returnFn({ foo: 'bar' });

而不是:

_.compose(doSomething, function () {
    return { foo: 'bar' };
});

3 个答案:

答案 0 :(得分:4)

  

你怎么称呼一个带有值的函数并返回一个返回该值的函数?

你所拥有的似乎是curryied identity function,在Haskell中被称为const。当它返回一个函数时,它是higher order function,也可能称为函数factory。返回的函数 - constant function - 是closure,因为它可以访问外部函数的参数。

  

所以我可以知道Lodash是否真的有这种方法。

不,它没有。但是,您可以通过_.binding _.partial轻松自行撰写_.identity函数:

var returnFn = _.bind(_.partial, null, _.identity);

你的简单实现虽然会更快......

_.compose(doSomething, returnFn({ foo: 'bar' }));

你在那里做什么 只是partial application,你不应该使用compose。跟着

_.partial(doSomething, {foo: 'bar'});

答案 1 :(得分:2)

他们被称为higher order functions

答案 2 :(得分:2)

Ingo表示,生成另一个函数的函数称为 higher order function

返回其第一个参数的函数称为 identity function