组合函数

组合函数

  1. 定义: 多个函数组合成一个新的函数(需要注意函数的调用顺序)
    <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>
  2. 封装组合函数
    <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 协议 ,转载请注明出处!