compose:
是一种编程模式,就是队列执行一系列的任务函数,每一个执行完的结果作为参数传递到前一个执行的函数,一直到整个函数都执行完毕,返回最终的结果;
compose的执行顺序是从右往左,即最末尾的先执行,当前函数执行完后依次往前传递参数执行
function compose() {
var args = [].slice.call(arguments);
return function (initArg) {
return args.reduceRight(function (init, current) {
return current(init);
}, initArg)
}
}
var add=function(num){
return num+2;
}
var multipliction=function(num){
return num*10;
}
var methodArr = compose(add,multipliction);
methodArr(10); // 102
reduceRight 是从右往左执行,就相当于add(multipliction(10))
pipe:
就是跟compose相反,
function pipe() {
var args = [].slice.call(arguments);
return function (initArg) {
return args.reduce(function (init, current) {
return current(init);
}, initArg)
}
}
var add=function(num){
return num+2;
}
var multipliction=function(num){
return num*10;
}
var methodArr = pipe(add,multipliction);
methodArr(10); // 120
reduce 是从左往右执行,就相当于multipliction(add(10))
compose 和pipe编程模式,是降低耦合最好的体现,可以随意组合和使用方法,不用在依赖于callback的嵌套