如何理解多个参数的函数组合?

Yad*_*ood 2 javascript functional-programming underscore.js lodash

如:

var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };

var fn = _.compose([foo, bar]);
Run Code Online (Sandbox Code Playgroud)

怎么理解fn

jfr*_*d00 6

这不行.

首先, _.compose()不采取数组.它将函数列表作为单独的参数,如:

var fn = _.compose(foo, bar);
Run Code Online (Sandbox Code Playgroud)

然后,即使以这种方式完成,也可以使用下划线 _.compose(),每个连续函数也会传递前一个函数的返回结果.由于您的两个函数都需要两个参数并返回一个参数,因此这不起作用.

如果您修复代码以正确传递参数 _.compose(),那么您将拥有:

var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };

var fn = _.compose(foo, bar);
Run Code Online (Sandbox Code Playgroud)

如果你那么使用fn这样:

fn(2, 5);
Run Code Online (Sandbox Code Playgroud)

它会尝试执行:

foo(bar(2, 5));
Run Code Online (Sandbox Code Playgroud)

打破这一点,bar(2, 5)将会返回10,所以你会得到调用的结果foo(10),但是NaN因为第二个参数foo()是,所以会产生undefined.

_.compose 是为列表中最后一个以外的函数设计的,这些函数对单个参数进行操作,该参数是列表中先前函数的返回值.

显示它返回的实际实现NaN:http://jsfiddle.net/jfriend00/xhbcdh9k/