高阶函数

2019-01-12  本文已影响0人  MF_遇见零一

一种缓存方法

function test (fn) {
  var cache = {}
  return function () {
    // 等价于add函数
    var args = JSON.stringify(arguments)
    if (!cache[args]) {
      cache[args] = fn(arguments)
    }
    return cache[args]
  }
}

var add = test(function (args) {
  var argLen = args.length,
    item,
    res = 0
  for (var i = 0; i < argLen; i++) {
    item = args[i]
    res += item
  }
  return res
})

console.log(add(1, 2, 3))   // 6

左倾函数

function compose () {
  var args = [].slice.call(arguments)
  return function (x) {
    return args.reduceRight(function (prev, cur) {
      return cur(prev)
    }, x)
  }
}

function compose2 () {
  let args = [].slice.call(arguments)
  return x => args.reduceRight((res,cb) => cb(res), x)
}

var toUpperCase = x => x.toUpperCase()
var split = x => x.split('')
var reverse = x => x.reverse()
var join = x => x.join('')

var f = compose2(join, reverse, split, toUpperCase)
console.log(f('hello'))
上一篇 下一篇

猜你喜欢

热点阅读