heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"use strict";
 
var isValue  = require("../../object/is-value")
  , callable = require("../../object/valid-callable")
  , aFrom    = require("../../array/from");
 
var apply = Function.prototype.apply
  , call = Function.prototype.call
  , callFn = function (arg, fn) { return call.call(fn, this, arg); };
 
module.exports = function (fnIgnored/*, …fnn*/) {
    var fns, first;
    var args = aFrom(arguments);
    fns = isValue(this) ? [this].concat(args) : args;
    fns.forEach(callable);
    fns = fns.reverse();
    first = fns[0];
    fns = fns.slice(1);
    return function (argIgnored) { return fns.reduce(callFn, apply.call(first, this, arguments)); };
};