今天在学习过程发现函数聚合的写法
就是按照指定顺序执行一组函数
以前也遇到过 但是没有深入研究怎么实现的
今天学习的时候又绕不过去 就研究了一下 这里记录一下
其实很简单
一个方法就能搞定
就是数组的reduc方法
下面来简单实现一下
// 这里是三个操作函数
function f1(arg){
arg += 'arg=>1 '
console.log('f1处理了arg:'+arg)
return arg
}
function f2(arg){
arg += 'arg=>2 '
console.log('f2处理了arg:'+arg)
return arg
}
function f3(arg){
arg += 'arg=>3 '
console.log('f3处理了arg:'+arg)
return arg
}
// 这是聚合函数 将几个不同的函数聚合起来按顺序执行
function compose(...funs){
// 数据兜底
if(funs.length === 0) return arg => arg
if(funs.length === 1) return funs[0]
// 实现聚合 这里为了方便看 没有全写成箭头函数
return funs.reduce((prev,curr)=>{
// 返回一个函数 函数执行体是用下一个函数包裹上一个函数的返回值
return (...args)=>curr(prev(...args))
})
}
console.log(compose(f1,f2,f3)(''))
//输出
f1处理了arg:arg=>1
f2处理了arg:arg=>1 arg=>2
f3处理了arg:arg=>1 arg=>2 arg=>3
arg=>1 arg=>2 arg=>3
compose(f1,f2,f3)('')
其实就是f3( f2( f1('') ) )
通过处理 把结果返回给下一个处理函数
不过就是现在这个处理顺序可以随意改变 如compose(f2,f1,f3)('')
redux的applyMiddleware方法应该就是类似这种的实现方式在dispatch的时候执行一些附加的方法