compose 组合函数
- 概念:它将需要嵌套执行的函数平铺。嵌套执行指的是,一个函数的返回值将作为另一个函数的参数
- 作用:实现函数式编程中的 pointfree 风格(无参数),使我们专注于【转换】而不是【数据】
- 实现:接收多个函数作为参数,从右到左,一个函数的输入为另一个函数的输出
- 意义:编程更精练、算法更清晰、无参数干扰
- 威力:【任意组合】
- 缺点:不能直观的看到参数
- 示例
var compose = function(fun1,fun2){
return function(val){
return fun1(fun2(val));
}
}
var add = function(val){
return val + "111";
}
var upperCase = function(val){
return val.toUpperCase();
}
var double = function(val){
return val += val;
}
var upperCaseThenAdd = compose(add,upperCase);
var doubleThenAdd = compose(double,add);
var addThenAdd = compose(add,add);
var addThenAddThenUpperCase = compose(upperCase,addThenAdd);
console.log(upperCaseThenAdd("china"));
console.log(doubleThenAdd("china"));
console.log(addThenAdd("china"));
console.log(addThenAddThenUpperCase("china"));
var compose1 = function(){
var args = arguments;
return function(initVal){
var val = initVal;
for(key in args){
val = args[key](val);
}
return val;
}
}
var doubleThenUpperCaseThenAddThenAdd = compose1(double,upperCase,add,add);
console.log(doubleThenUpperCaseThenAddThenAdd("china"));