我正在使用Lodash和compose尝试使用Javascript更具功能性的风格。我注意到我有时需要一个返回值的函数。所以想知道这是什么叫,所以我可以知道Lodash是否真的有这种方法。
var returnFn = function (i) {
return function () {
return i;
};
};
示例:
_.compose(doSomething, returnFn({ foo: 'bar' });
而不是:
_.compose(doSomething, function () {
return { foo: 'bar' };
});
答案 0 :(得分:4)
你怎么称呼一个带有值的函数并返回一个返回该值的函数?
你所拥有的似乎是curryied identity function,在Haskell中被称为const
。当它返回一个函数时,它是higher order function,也可能称为函数factory。返回的函数 - constant function - 是closure,因为它可以访问外部函数的参数。
所以我可以知道Lodash是否真的有这种方法。
不,它没有。但是,您可以通过_.bind
ing _.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 。