什么是compose
compose是函数式编程中的一种写法, 它把逻辑解耦在各个函数中,通过compose的方式组合函数, 将外部数据依次通过各个函数的加工,生成结果。
有几点需要注意的:
1、第一个函数是多元的(接受多个参数),后面的函数都是单元的(接受一个参数)
2、执行顺序的自右向左的
3、所有函数的执行都是同步的
compose实现
简单实现两个函数的compose
f(x) = (5 + x) ^3
// 这个运算有两个操作,先做加法运算,再做幂运算
function power(x) {
return Math.pow(x, 3)
}
function add(x) {
return x + 5
}
function compose(fn1, fn2) {
return function(x) {
return fn1(fn2(x))
}
}
// 可简写成
const compose = (fn1, fn2) => x => fn1(fn2(x))
compose(power, add)(5) // 1000
实现多个compose(面向过程)
const compose = function(...funcs) {
let length = funcs.length
let count = length - 1
let result
return function f1 (...arg1) {
result = funcs[count].apply(this, arg1)
if (count <= 0) {
count = length - 1
return result
}
count--
return f1.call(null, result)
}
}
思路就是使用递归的过程思想,不断的检测队列中是否还有任务,如果有任务就执行,并把执行结果往后传递。