如何实现可接收多函数的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
相关产品推荐
相关产品推荐

