redux之compose

compose的源码比较简单,但写成es6就比较操蛋

export default function compose(...funcs) {
  if (funcs.length === 0) {
    return arg => arg
  }

  if (funcs.length === 1) {
    return funcs[0]
  }

  return funcs.reduce((a, b) => (...args) => a(b(...args)))
}

转换为es5就比较舒服

function compose() {
  var _len = arguments.length;
  var funcs = [];
  for (var i = 0; i < _len; i++) {
    funcs[i] = arguments[i];
  }

  if (funcs.length === 0) {
    return function (arg) {
      return arg;
    };
  }

  if (funcs.length === 1) {
    return funcs[0];
  }

  return funcs.reduce(function (a, b) {
    return function () {
      return a(b.apply(undefined, arguments));
    };
  });
}     //引用的是 https://segmentfault.com/a/1190000016460366

 流程为

  1.将argument每一项拷贝到funs中

  2.长度为0 返回一个 返回函数

  3.长度为1,返回第一个

  4.长度大于1,调用Array.prototype.reduce方法进行整合

 

posted @ 2020-03-11 14:12  会挽雕弓如满月的张  阅读(204)  评论(0)    收藏  举报