推荐答案
// www.javascriptcn.com code example const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))); // 示例用法 const add = x => x + 1; const multiply = x => x * 2; const subtract = x => x - 3; const composedFn = compose(add, multiply, subtract); console.log(composedFn(5)); // 输出: 7
本题详细解读
1. 函数组合的概念
函数组合是指将多个函数按照一定的顺序组合在一起,形成一个新的函数。这个新函数的输入会依次经过每个函数的处理,最终输出结果。
2. compose 函数的实现
compose 函数接收任意数量的函数作为参数,并返回一个新的函数。这个新函数会从右到左依次执行传入的函数。
- 参数:
...fns表示接收任意数量的函数作为参数。 - 返回值:返回一个新的函数,这个函数会从右到左依次执行传入的函数。
3. reduce 方法的使用
reduce 方法用于将数组中的元素依次执行某个操作,最终返回一个单一的值。在这里,reduce 方法用于将多个函数组合在一起。
- 初始值:
reduce的初始值是一个函数(f, g) => (...args) => f(g(...args))。 - 操作:每次迭代时,
reduce会将当前的函数f和下一个函数g组合在一起,形成一个新的函数(...args) => f(g(...args))。
4. 示例解析
在示例中,compose(add, multiply, subtract) 会生成一个新的函数,这个函数会先执行 subtract,然后执行 multiply,最后执行 add。
- 输入:
5 - 执行顺序:
subtract(5)返回2multiply(2)返回4add(4)返回5
- 输出:
5
5. 注意事项
- 函数组合的顺序是从右到左,即最后一个函数先执行,第一个函数最后执行。
- 如果传入的函数数量为 0,
compose函数会返回一个恒等函数(即x => x)。