组合函数
组合函数
- 定义: 多个函数组合成一个新的函数(需要注意函数的调用顺序)
<script> function add(a) { return a+=5 } function mul(b) { return b-=5 } function comp(add,mul) { return function(v) { return mul(add(v)) } } let foo=comp(add,mul) console.log(foo(5)) </script>
- 封装组合函数
<script> function comp(...fns) { let length=fns.length // 判断参数是否都是函数类型 for(let i=0;i<length;i++) { if(!typeof fns[i]==='function') { throw TypeError('expect function') } } // 最终返回一个新函数,用来传入参数 return function(...args) { // 依次调用函数数组 let index=0 // 收集到全部参数是个数组,完成第一层函数逻辑之后返回结果,将结果传递给下一层函数 // 这里就需要处理好函数之间的调用逻辑 let res=length? fns[index].apply(this,args):args // 如果没有传递函数,就直接返回传递的参数 while(++index<length) { // 这里用call比较合适,用apply也可以,但是得套用一层[] res=fns[index].call(this,res) } // 返回最终的结果 return res } } let a=function(v) { return v*5 } let b=function(v) { return v/5 } // 产生一个新函数用来传递参数 let fn=comp(a,b) console.log(fn(5)) --> 5 </script>
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!