求教!有关函数式编程compose疑问

才学习函数式编程,在网上看见别人对compose方法的实现

function compose(...args) {
  let length = args.length
  let count = length - 1
  let result
  return function f1(...arg1) {
    result = args[count].apply(this, arg1)
    if (count <= 0) {
      count = length - 1
      return result
    }
    count--
    return f1.call(null, result)
  }
}

对这段代码有疑惑

result = args[count].apply(this, arg1)

为什么要改变args[count]的this指向,compose处理的不是纯函数吗?apply是为了解决什么而存在的。求举例说明!

阅读 1.8k
2 个回答

纯函数里难道不能有 this 么… Array.prototype.map 不服…

compose 函数本来就是为了把多个函数合成一个函数:

const com = compose(
  console.log,
  o => o.b,
  o => o.a
)

从输入里面取出 a, 然后在结果里取出 b, 然后再输出

com({
  a: {
    b: 1
  }
})

结果是 1

不去传递这个 this 的话,compose 参数里用到 this 的地方就有问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题