纯函数和柯里化很容易写出洋葱代码,即一层套一层的方法h(g(f(x)))。
例如前面实现的一个功能:将一个数组的最后一个元素转换成大写字母:_.toUpper(_.first(_.reverse(array))),这种多次嵌套就是洋葱代码,为了解决这种状况,需要使用函数组合。
函数组合可以让我们把细粒度的函数重新组合生成一个新的函数
函数组合
如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数
函数就像是数据的管道,函数组合就是把这些管道连接起来,让数据穿过多个管道形成最终结果,函数组合默认是从右到左执行。
lodash中的组合函数
lodash中组合函数flow()和flowRight(),它们都可以组合多个函数,flow()是从左到右运行,flowRight()是从右到左运行。
模拟实现flowRight()
函数组合条件
函数的组合要满足结合律:我们可以把g和h组合,也可以把f和g组合,并且结果都是一样的:
let f = compose(f,g,h);
compose(compose(f,g),h) == compose(f,compose(g,h))
![](https://img2020.cnblogs.com/blog/1304208/202103/1304208-20210316163758565-179720627.png)