1. 纯函数和柯里化很容易写出洋葱代码 : f(g(h(x))) -> 类似于洋葱 一层包裹一层
    例:获取数组最后一项,并且将其转换成大写字母 ->.toUpperCase(.first(_.reverse(arr)))

  2. 组合函数 可以让我们将细粒度的函数重新组合成一个新的函数

  3. 管道概念 :
    image.png

如上图 给fn输入参数 a , 运行后的到结果 b -> a数据通过管道fn 得到了b数据
当fn 很复杂的时候, 我们可以把fn 拆分成很多小函数

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21580043/1625064095784-40d94613-2661-4ce2-8ec6-0b037b864367.png#clientId=uce5dd4aa-0230-4&from=paste&height=120&id=BdGMN&name=image.png&originHeight=240&originWidth=1053&originalType=binary&ratio=2&size=136288&status=done&style=none&taskId=u9d425d54-80bb-4e32-988a-ebf2464f944&width=526.5)<br />如上图 fn 通过拆分 , 形成了 管道 f3 、 管道 f2 、 管道 f1;<br /> 同时数据 a 经过管道 , 依次执行的结果是 a-> m -> n ->b。
  1. fn = compose(f1,f2,f3);
  2. b = fn(a);

函数组合 compose

如果一个函数,要经过多个函数处理,才可以得到最终值,这时候可以把中间过程函数合并成一个函数

  • 函数就像是处理数据的管道,函数组合就是把这些管道连接起来。让数据穿过多个管道形成最终结果。
  • 函数组合默认是从右到左执行


  1. // 定义一个 compose 函数 可以传递多个函数,并且执行顺序是从右向左
  2. const myCompose = (f, g) => {
  3. return function (value) {
  4. return f(g(value))
  5. }
  6. }
  7. // 求数组的最后一项
  8. const first = function (arr) {
  9. return arr[0]
  10. }
  11. const reverse = function (arr) {
  12. return arr.reverse()
  13. }
  14. const lastFn = myCompose(first, reverse);
  15. console.log(lastFn([2, 3, 7, 8, 3,77]))
  16. // 77