手动实现compose

本文介绍了函数式编程中的compose概念,它用于解耦逻辑并按自右向左顺序组合函数。compose要求第一个函数接受多个参数,后续函数接受一个参数,并同步执行。文章通过实例展示了如何简单实现两个函数及多个函数的compose操作,利用递归实现任务执行的队列传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是compose

compose是函数式编程中的一种写法, 它把逻辑解耦在各个函数中,通过compose的方式组合函数, 将外部数据依次通过各个函数的加工,生成结果。
有几点需要注意的:
1、第一个函数是多元的(接受多个参数),后面的函数都是单元的(接受一个参数)
2、执行顺序的自右向左的
3、所有函数的执行都是同步的

compose实现

简单实现两个函数的compose

f(x) = (5 + x) ^3
// 这个运算有两个操作,先做加法运算,再做幂运算

function power(x) {
  return Math.pow(x, 3)
}
function add(x) {
  return x + 5
}
function compose(fn1, fn2) {
    return function(x) {
      return fn1(fn2(x))
   }
}
// 可简写成
const compose = (fn1, fn2) => x => fn1(fn2(x))
compose(power,  add)(5)  // 1000

实现多个compose(面向过程)

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

思路就是使用递归的过程思想,不断的检测队列中是否还有任务,如果有任务就执行,并把执行结果往后传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值