const _ = {}; _.compose = (...fns) => { let result = null; return (...args) => { result = args; for(let i = fns.length - 1; i >= 0; i--) { let fnResult = fns[i](...result); result = Array.isArray(fnResult) ? fnResult : [fnResult]; } return result; }; }; const consider = name => `I think it could be... ${name}`; const exclaim = statement => `${statement.toUpperCase()}!`; const blame = _.compose(consider, exclaim); const result = blame('you'); console.log(result);