function compose(...fns) { return function(...args) { let res = null let isFirstFn = true for(let fn of fns.reverse()) { if (isFirstFn) { isFirstFn = false res = fn.apply(this, args) } else { res = fn.call(this, res) } } return res } } function add(a, b) { return a + b } function mutil(a) { return a * 10 } function minus(a) { return a - 1 } let fn = compose(minus, mutil, add) console.log(fn(2, 5))