原理
利用了闭包的特性
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))
复制代码