是一种将函数返回值缓存起来的方法,Memoization 原理非常简单,就是把函数的每次执行结果都放入一个键值对中,在接下来的执行中,在键值对中查找是否已经有相应执行过的值,如果有,直接返回该值,没有才真正执行函数体的求值部分。很明显,找值,尤其是在键值对中找值,比执行函数快多了。
//利用了闭包的变量储存在内存中
function memoization(fn){
var cache = {};
return function(){
var key = arguments[0];
if(cache[key]){
return cache[key]
}else{
var val = fn.apply(this,arguments);
cache[key] = val;
return val
}
}
}
var fibonacci = memoization(function(n){
return (n === 0 || n === 1)?n:fibonacci(n-1)+fibonacci(n-2)
})
console.log(fibonacci(100))
console.log(fibonacci(100))//代码中,第 2 次计算 fibonacci (100) 则只需要在内存中直接读取结果。
网友评论