程序员

compose - 代码聚合

2021-02-14  本文已影响0人  申_9a33

假如有三个函数,每个函数的返回值作为其他函数的入参

function f1(arg){
  return `f1${arg}`
}

function f2(arg){
  return `f2${arg}`
}

function f3(arg){
  return `f3${arg}`
}
console.log(f1(f2(f3("hello"))))

// => f3
// => f2
// => f1
// => f1f2f3hello
function compose(...funcs){
  if(funcs.length === 0){
    return arg =>arg
  }

  if(funcs.length === 1){
    return funcs[0]
  }

  return funcs.reduce((a,b)=>(...args)=>a(b(...args)))
}

console.log(compose(f1,f2,f3)('hello'))

// => f3
// => f2
// => f1
// => f1f2f3hello
function compose(...funcs){
    if(funcs.length === 0){
      return arg =>arg
    }
  
    if(funcs.length === 1){
      return funcs[0]
    }
  
    return funcs.reduce((a,b)=>{
        console.log(a,b,'1')
        return (...args)=>{
            console.log(a,b,'2')
            return a(b(...args))
        }
    })
  }
console.log(compose(f1,f2,f3))

// => [Function: f1] [Function: f2] 1
// => [Function (anonymous)] [Function: f3] 1
// => [Function (anonymous)]
上一篇 下一篇

猜你喜欢

热点阅读