redux源码解读--compose源码解析
compose源码解析
compose(f,g,h) ====> (...args) => f(g(h(...args))) 模块的代码很简单,但是涉及到的内容却很重要,下面一点一点的看。 reduce是什么?
arr.reduce(callback[,initialValue]) callback是执行数组中每个元素的函数,这个函数接收几个参数:
综上,reduce方法详细的签名就是: arr.reduce(function (accumulator,currentValue,currentIndex,array) {}[,initialValue]) 几个小Demo
[1,2,3,4,5].reduce((a,b) => a + b) // 15
[[0,1],[2,3],[4,5]].reduce((a,b) => { return a.concat(b); },[]); // [ 0,1,5 ]
明白了 import compose from '../src/compose' // function f const f = (arg) => `函数f(${arg})` // function g const g = (arg) => `函数g(${arg})` // function h 最后一个函数可以接受多个参数 const h = (...arg) => `函数h(${arg.join('_')})` const r = compose(f,h) console.log(typeof r) // function console.log(r(1,3)) //函数f(函数g(函数h(1_2_3))) 从上面可以的代码可以看出:compose的运行结果是一个函数,调用这个函数所传递的参数将会作为compose最后一个参数的参数,从而像'洋葱圈'似的,由内向外,逐步调用。
源码 export default function compose(...funcs) { // funcs是一个保存着所有参数函数的数组 // 如果没有传递任何参数,就返回一个函数,这个函数是输入什么得到什么。 if (funcs.length === 0) { return arg => arg } // 只传递一个参数的时候,就直接把这个函数返回 if (funcs.length === 1) { return funcs[0] } // 返回组合函数 return funcs.reduce((a,b) => (...args) => a(b(...args))) } 这就是对 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |