当前位置:首页 > JavaScript

js实现compose

2026-02-01 04:24:43JavaScript

实现 compose 函数的方法

在 JavaScript 中,compose 函数用于将多个函数组合成一个新的函数,新函数的执行顺序是从右到左。以下是几种实现 compose 的方法:

使用 reduce 实现

const compose = (...fns) => 
  fns.reduce((f, g) => (...args) => f(g(...args)));

递归实现

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

使用 reduceRight 实现

const compose = (...fns) => 
  fns.reduceRight((prevFn, nextFn) => 
    (...args) => nextFn(prevFn(...args))
  );

示例用法

const add5 = x => x + 5;
const multiply2 = x => x * 2;
const subtract3 = x => x - 3;

const composedFn = compose(subtract3, multiply2, add5);
console.log(composedFn(5)); // 输出: (5 + 5) * 2 - 3 = 17

实现 pipe 函数的方法

pipe 函数与 compose 类似,但执行顺序是从左到右。以下是实现方式:

js实现compose

使用 reduce 实现

const pipe = (...fns) => 
  fns.reduce((f, g) => (...args) => g(f(...args)));

示例用法

const pipedFn = pipe(add5, multiply2, subtract3);
console.log(pipedFn(5)); // 输出: ((5 + 5) * 2) - 3 = 17

注意事项

  • composepipe 的区别在于函数的执行顺序。
  • 确保传入的函数参数是可执行的,否则会抛出错误。
  • 可以结合箭头函数和剩余参数(...)简化实现。

标签: jscompose
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现继承

js实现继承

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

js实现复制功能

js实现复制功能

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

js如何实现继承

js如何实现继承

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

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…