概括来说,就是接收若干个函数作为参数,返回一个新函数。新函数执行时,按照由右向左的顺序依次执行传入compose中的函数,每个函数的执行结果作为下一个函数的输入,直至最后一个函数的输出作为最终的输出结果。
组合
function compose(...fns){
return function(rest){
return fns.reduceRight(function(arg,fn){
return fn(arg)
},rest)
}
}
管道 -> 与组合方向相反
function pipeline(...fns){
return function(rest){
return fns.reduce(function(arg,fn){
return fn(arg)
},rest)
}
}
示例代码
function x(str){
return str.toUpperCase()
}
function y(str){
return str.split('')
}
function z(arr){
return arr.join('-')
}
let fn = pipeline(x,y,z)
fn('zjy') //"Z-J-Y"