高阶函数

一种缓存方法

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'))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容