js中的缓存memorize函数

原理

利用了闭包的特性

code

function memoize(func, hashFunc) {
  var memoize = function(key) {
    var cache = memoize.cache
    var address = '' + (hashFunc ? hashFunc.apply(this, arguments) : key)
    if(Object.getOwnPropertyNames(cache).indexOf(address) === -1) {
      cache[address] = func.apply(this, arguments)
    }
      return cache[address]
  }
  memoize.cache = {}
  return memoize
}


复制代码

test

let fibonacci = memoize(function(n){
  return n < 2 ? n: fibonacci(n - 1) + fibonacci(n - 2);
})
console.log(fibonacci(1))
console.log(fibonacci(2))
console.log(fibonacci(3))
console.log(fibonacci(4))
console.log(fibonacci(10))
console.log(fibonacci(100))
复制代码

转载于:https://juejin.im/post/5d078b63e51d454d544abf5c

猜你喜欢

转载自blog.csdn.net/weixin_34297300/article/details/93177514
今日推荐