当前位置:首页 > JavaScript

js compose 实现

2026-03-14 08:12:55JavaScript

实现 JavaScript 的 compose 函数

compose 是一种函数式编程概念,用于将多个函数组合成一个函数,从右到左依次执行。以下是几种实现方式:

基础实现

const compose = (...fns) => 
  (x) => fns.reduceRight((acc, fn) => fn(acc), x);

使用示例:

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)); // ((5 + 5) * 2)^2 = 400

支持异步函数的实现

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

从左到右的管道(pipeline)实现

const pipe = (...fns) => 
  (x) => fns.reduce((acc, fn) => fn(acc), x);

使用递归的实现

const recursiveCompose = (...fns) => {
  const [first, ...rest] = fns.reverse();
  return (...args) => rest.reduce(
    (acc, fn) => fn(acc), 
    first(...args)
  );
};

实现原理说明

compose 函数利用了数组的 reduceRight 方法,从右到左依次执行函数:

  • 初始值是传入的参数 x
  • 每个函数将前一个函数的返回值作为输入
  • 最终返回组合后的函数

性能考虑

对于大量函数的组合,可能需要考虑性能优化:

  • 避免在循环或高频调用的地方使用 compose
  • 对于固定组合,可以预先计算并缓存组合结果

类型安全的 TypeScript 实现

type Func<T, R> = (arg: T) => R;

function compose<T1, T2, T3>(
  fn1: Func<T2, T3>,
  fn2: Func<T1, T2>
): Func<T1, T3>;
function compose<T1, T2, T3, T4>(
  fn1: Func<T3, T4>,
  fn2: Func<T2, T3>,
  fn3: Func<T1, T2>
): Func<T1, T4>;
// 可以继续添加更多重载
function compose(...fns: Function[]) {
  return (x: any) => fns.reduceRight((acc, fn) => fn(acc), x);
}

应用场景

compose 适用于:

js compose 实现

  • 数据处理流水线
  • 中间件系统
  • 函数转换链
  • 避免深层嵌套函数调用

标签: jscompose
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…