当前位置:首页 > JavaScript

js compose 实现

2026-02-01 09:36:14JavaScript

实现 JavaScript 的 compose 函数

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

js 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实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现延迟

js实现延迟

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…