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?
这不行.
首先, _.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/