在函数式编程中,经常会出现多个函数组合,像这样:
const add1 = (x) => x + 1
const mul3 = (x) => x * 3
const div2 = (x) => x / 2
add1(mul3(div2(add1(6)))) // 11.5
这样虽然能够完成计算,但是可读性很差,所以我们需要构造一个函数完成上面的功能:
function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
compose(add1, mul3, div2, add1)(6); // 11.5