当前位置:首页 > JavaScript

js compose 实现

2026-02-01 09:36:14JavaScript

js compose 实现

js compose 实现

实现 JavaScript 的 compose 函数

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

基础实现(ES5)

function compose() {
  var fns = Array.prototype.slice.call(arguments);
  return function (x) {
    return fns.reduceRight(function (acc, fn) {
      return fn(acc);
    }, x);
  };
}

ES6 简化版

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

支持异步函数的实现

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

使用示例

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

const composedFn = compose(square, multiply2, add5);
console.log(composedFn(3)); // 输出: 256 (3+5=8, 8*2=16, 16*16=256)

实现要点

  • 参数收集:使用 rest 参数 ...fns 收集所有传入的函数
  • 执行顺序:通过 reduceRight 确保从右到左执行
  • 初始值:将输入值 x 作为初始值传递给第一个执行的函数

扩展实现(从左到右的 pipe)

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

标签: jscompose
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现延迟

js实现延迟

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

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…