pipe (从左往右)

计算 **(x+2)*5** 的值

  1. fn1 = x => x + 2
  2. fn2 = x => 5*x
  3. let result = pipe(fn1, fn2)(3) // 25
  4. function pipe() {
  5. // let args = Array.from(arguments)
  6. let args = Array.prototype.slice.call(arguments)
  7. return function(x) {
  8. return args.reduce((result, cb) => {
  9. return cb(result)
  10. }, x)
  11. }
  12. }

compose (从右往左)

  1. function compose(...args) {
  2. return function(x) {
  3. return args.reduceRight((result, cb) => {
  4. return cb(result)
  5. }, x)
  6. }
  7. }