4.14 compose

4.14.1 语法

_.compose(*functions)

4.14.2 说明

返回函数集 functions 组合后的复合函数, 也就是一个函数执行完之后把返回的结果再作为参数赋给下一个函数来执行. 以此类推。
把函数f(), g(),和h()组合起来可以得到复合函数f(g(h(arg)))

示例一: 基本用法

//加5函数
function add5(n) {
    return n + 5;
}

//乘2函数
function x2(n) {
    return n * 2;
}

//根据上面两方法实现n * 2 + 5
var x2add5 = _.compose(add5, x2);

x2add5(4); // Number => 13

示例二: 组合三个或函数

function f(n) {
    return n * 2;
}

function g(n) {
    return 100 + n;
}

function h(n) {
    return n / 2;
}

//从右往左执行,即 (n / 2 + 100) * 2
_.compose(f, g, h)(2); // Number => 202

//我们也可以让他弹出来
_.compose(alert, f, g, h)(2); // alert => 202

4.14.3 源码展示

_.compose = function() {
    var args = arguments; //接收的多个函数
    var start = args.length - 1; //从最后一个开始

    //返回一个function
    return function() {
        var i = start;

        //执行方法并返回结果,最后个函数用的是apply,说明能接收多个参数
        var result = args[start].apply(this, arguments);

        //接着执行后面的方法,只能接收一个参数
        while (i--) result = args[i].call(this, result);

        //返回最后的结果
        return result;
    };
};

4.14.4 最初的函数可以接收多个参数

_.compose(alert, Math.min)(10, 4); //=> 4