compose解析

241 阅读1分钟

compose

compose在很多地方都出现过,redux中间件实现、koa洋葱圈模型、高阶组件等等。

compose本质是一种设计模式-分层设计。compose的作用是组合函数,把函数串联执行,前函数的输入当后函数的输出。

实现

递归

const fn1 = (num) => {
  console.log(num);
  return 3;
};

const fn2 = (num) => {
  console.log(num);
  return 4;
};

const fn3 = (num) => {
  console.log(num);
  return 5;
};


const compose = (...fns) => {
  return function process(val) {
    if (fns.length > 1) {
      const processFns = [...fns];
      const fn = processFns.pop();
      const res = fn(val);
      return compose(...processFns)(res);
    } else {
      const fn = fns[0];
      if (fn) {
        return fn(val);
      }
      return val;
    }
  };
};

迭代

const compose = (...fns) => {
  return (val) => {
    return fns.reduceRight((t, c) => {
      return c(t);
    }, val);
  };
};

关于运用场景

分层设计,例如我们把定位分在一层、动画分在一层、实际渲染分在一层。这样其实就是做到了关注点分离,很好的做到了分层设计。

//根据dsl渲染
compose(animation,position)(box)