You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现可接收多函数的JavaScript函数组合函数compositionFunc?

实现函数组合工具函数compositionFunc

需求说明

需要实现compositionFunc()函数,它可以接收任意数量的函数作为参数,返回一个嵌套函数。这个嵌套函数接收一个初始值,会按传入顺序依次执行所有函数——将前一个函数的执行结果作为下一个函数的输入,最终返回累计执行后的结果。

完整实现代码

// 示例函数(可根据需求修改功能)
const func1 = (arg1) => {
  return arg1 + 1;
};
const func2 = (arg2) => {
  return arg2 * 2;
};
const func3 = (arg3) => {
  return arg3 - 3;
};
const func4 = (arg4) => {
  return arg4 ** 2;
};
const func5 = (arg5) => {
  return arg5 / 2;
};

// 函数组合实现
const compositionFunc = (...funcs) => {
  // 处理无函数传入的情况,返回恒等函数
  if (funcs.length === 0) {
    return (value) => value;
  }
  
  return (initialValue) => {
    // 按顺序执行所有函数,传递前一次的结果
    return funcs.reduce((accumulator, currentFunc) => {
      return currentFunc(accumulator);
    }, initialValue);
  };
};

// 测试示例
const composedFunction = compositionFunc(func1, func2, func3, func4, func5);
console.log(composedFunction(2)); // 输出:4.5
// 计算过程:((((2 + 1) * 2) - 3) ** 2) / 2 = 4.5

代码逻辑说明

  • 参数接收:使用剩余参数语法...funcs捕获所有传入的函数,统一存入数组。
  • 边界处理:如果没有传入任何函数,返回一个恒等函数(输入值直接返回),避免后续执行出错。
  • 函数组合执行:返回的嵌套函数利用Array.reduce()遍历函数数组,accumulator保存每次执行后的结果,初始值为传入的initialValue;每次迭代将累计结果传入当前函数,更新累计值,最终返回最终结果。

内容的提问来源于stack exchange,提问作者trainee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:35:31