Skip to content

组合函数: 在柯里化函数的基础上的一个特殊应用场景 执行compose预先把要执行的函数顺序处理好,返回一个处理函数operate 当把处理函数operate执行时,传递的实参为初始值,按照事先处理好的函数执行顺序,依次执行

js
const add1 = x => x + 1
const mul3 = x => x * 3
const div2 = x => x / 2
// 给你一个初始值y = 0,输出((y + 1) * 3) / 2的结果需要=> div2(mul3(add1(0)))
// 使用compose函数把div2(mul3(add1(0)))变成compose(div2, mul3, add1)(x)的形式,变得扁平化一些

function compose () {
  const args = Array.from(arguments)

  return function operate (x) {
    if (args.length === 0) {
      return x
    }
      
    return args.reduceRight((acc, fn) => {
      return fn(acc)
    }, x)
  }
}

let operate = compose(div2, mul3, add1)
console.log(operate(0))