纯函数和柯里化很容易写出洋葱代码 : f(g(h(x))) -> 类似于洋葱 一层包裹一层
例:获取数组最后一项,并且将其转换成大写字母 ->.toUpperCase(.first(_.reverse(arr)))组合函数 可以让我们将细粒度的函数重新组合成一个新的函数
管道概念 :
如上图 给fn输入参数 a , 运行后的到结果 b -> a数据通过管道fn 得到了b数据
当fn 很复杂的时候, 我们可以把fn 拆分成很多小函数
<br />如上图 fn 通过拆分 , 形成了 管道 f3 、 管道 f2 、 管道 f1;<br /> 同时数据 a 经过管道 , 依次执行的结果是 a-> m -> n ->b。
fn = compose(f1,f2,f3);
b = fn(a);
函数组合 compose
如果一个函数,要经过多个函数处理,才可以得到最终值,这时候可以把中间过程函数合并成一个函数
- 函数就像是处理数据的管道,函数组合就是把这些管道连接起来。让数据穿过多个管道形成最终结果。
- 函数组合默认是从右到左执行
// 定义一个 compose 函数 可以传递多个函数,并且执行顺序是从右向左
const myCompose = (f, g) => {
return function (value) {
return f(g(value))
}
}
// 求数组的最后一项
const first = function (arr) {
return arr[0]
}
const reverse = function (arr) {
return arr.reverse()
}
const lastFn = myCompose(first, reverse);
console.log(lastFn([2, 3, 7, 8, 3,77]))
// 77