当前位置:首页 > JavaScript

js compose 实现

2026-04-06 02:17:27JavaScript

实现 JavaScript 的 compose 函数

compose 函数是函数式编程中的一个重要概念,它可以将多个函数组合成一个新的函数,从右到左依次执行。

基本实现

最简单的 compose 实现方式:

const compose = (...fns) => 
  x => fns.reduceRight((v, f) => f(v), x);

这个实现:

  • 接收任意数量的函数作为参数
  • 返回一个新函数
  • 使用 reduceRight 从右到左依次执行函数
  • 每个函数的输出作为下一个函数的输入

使用示例

const add5 = x => x + 5;
const multiply2 = x => x * 2;
const square = x => x * x;

const composedFn = compose(square, multiply2, add5);
console.log(composedFn(5)); // 输出 400

执行流程:

  • 先执行 add5(5) 得到 10
  • 然后执行 multiply2(10) 得到 20
  • 最后执行 square(20) 得到 400

异步版本实现

如果需要支持异步函数组合:

const asyncCompose = (...fns) => 
  x => fns.reduceRight(
    (promise, fn) => promise.then(fn),
    Promise.resolve(x)
  );

更健壮的实现

添加参数验证和错误处理:

const compose = (...fns) => {
  if (fns.some(fn => typeof fn !== 'function')) {
    throw new TypeError('所有参数都必须是函数');
  }

  return x => fns.reduceRight((v, f) => {
    try {
      return f(v);
    } catch (error) {
      throw new Error(`函数执行错误: ${error.message}`);
    }
  }, x);
};

性能优化版本

使用循环代替 reduceRight 可能获得更好的性能:

const compose = (...fns) => {
  const length = fns.length;

  return x => {
    let result = x;
    for (let i = length - 1; i >= 0; i--) {
      result = fns[i](result);
    }
    return result;
  };
};

从左到右的 pipe 实现

与 compose 方向相反的 pipe 函数:

js compose 实现

const pipe = (...fns) => 
  x => fns.reduce((v, f) => f(v), x);

实际应用场景

  1. 中间件处理:如 Express/Koa 的中间件系统
  2. 数据处理流水线:对数据进行多步转换
  3. 函数组合:将小函数组合成更复杂的功能

这些实现方式可以根据具体需求选择使用,基本版本适用于大多数场景,特殊需求可以考虑其他变体。

标签: jscompose
分享给朋友:

相关文章

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…