compose函数
将函数扁平化处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function fn1(x){ return x + 1; } function fn2(x){ return x + 10; } function fn3(x){ return x*10; } function fn4(x){ return x/10; }
fn4(fn3(fn2(fn1(5))))
|
但是这么写太麻烦了 所以可以简化为这样 使用reduce 函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function compose(...funs){ return function proxy(...args){ let len = funs.length; if(len===0){ return args; } if(len === 1){ return funs[0](...args); } return funs.reduce((x,y)=>{ return typeof x === 'function' ? y(x(...args)) : y(x); }) } } compose()(5); compose(fn1,fn2,fn3,fn4)(5)
|