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

使用 reduce 实现
const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);
这种方式通过 reduceRight 从右到左依次执行函数,将前一个函数的返回值作为下一个函数的参数。

递归实现
const compose = (...fns) => {
if (fns.length === 0) return x => x;
if (fns.length === 1) return fns[0];
return fns.reduce((a, b) => (...args) => a(b(...args)));
};
递归实现更灵活,支持处理多个参数的情况,同时保留了函数组合的惰性求值特性。
使用 Promise 支持异步
const compose = (...fns) => x => fns.reduceRight((acc, fn) => acc.then(fn), Promise.resolve(x));
这种实现支持异步函数,每个函数返回一个 Promise,确保异步操作按顺序执行。
使用示例
const add = x => x + 1;
const multiply = x => x * 2;
const square = x => x * x;
const composed = compose(square, multiply, add);
console.log(composed(2)); // 输出: 36 (先执行 add(2) => 3, 再 multiply(3) => 6, 最后 square(6) => 36)
注意事项
- 函数组合的顺序是从右到左,即最后一个函数最先执行。
- 确保每个函数的返回值类型与下一个函数的参数类型兼容。
- 如果函数可能抛出异常,需要在组合函数中处理错误。






