美文网首页
redux compose.js

redux compose.js

作者: 诗和远方何你 | 来源:发表于2019-05-27 14:11 被阅读0次
    //  compose.js 源码
    function compose(...funcs) {
      if (funcs.length === 0) {
        return arg => arg
      }
    
      if (funcs.length === 1) {
        return funcs[0]
      }
      return funcs.reduce((a, b) => (...args) =>return a(b(...args)))
    }
    

    简单实现 reduce

    function fun0(v) {
      return v+'fun0'
    }
    function fun1(v) {
      return v+'fun1'
    }
    function fun2(v) {
      return v+'fun2'
    }
    
    function fun3(v) {
      return v+'fun3'
    }
    
    // 传入一个数组(此处[]:function),
    // 和一个回调函数,迭代执行回调,入参为(前一次回调返回的值,当前要迭代的元素) 
    function rreduce(arr=[],callback=()=>{}) {
      if(!arr.length) throw new Error('arga[0] should be array;');
      const len = arr.length;
      let k = 0;// 索引
      let value = arr[0];
      while (k<len-1){
        k ++;
        value = callback(value,arr[k],k)
      }
      return value;
    }
    // 当前遍历是 左->右
    const res = rreduce([fun0,fun1,fun2,fun3],function (pre,current) {
      return (...arguments)=>{
      // arguments为初始值1
        return current(pre(...arguments))
      }
    })(1);
    
    console.log(res); // 1fun0fun1fun2fun3
    

    相关文章

      网友评论

          本文标题:redux compose.js

          本文链接:https://www.haomeiwen.com/subject/iaxhtctx.html