function compose(...args) {
if (args.length === 0) return a => a
let index = args.length - 1
let res
return function func(...argss) {
let currentFunc = args[index]
res = currentFunc(...argss)
if (index != 0) {
index -= 1
return func(res)
} else {
return res
}
}
}
function test() {
let init = (...args) => args.reduce((ele1, ele2) => ele1 + ele2, 0)
let step2 = (val) => val + 2
let step3 = (val) => val + 3
let step4 = (val) => val + 4
let steps = [step4, step3, step2, init]
let composeFunc = compose(...steps)
console.log(composeFunc(1, 2, 3))
}
test()
console