SOURCE

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 命令行工具 X clear

                    
>
console