这是一个有效的JavaScript程序,用于生成斐波那契数,并通过记忆实现。
function memoize(fn) {
cache = {};
return function(...args){
if (cache[args]) {
return cache[args];
}
const results = fn.apply(null, args);
cache[args] = results;
return results;
}
}
function slowfib(n) {
if (n < 2) {
return n;
}
return fib(n-1) + fib(n-2);
}
fib = memoize(slowfib);
module.exports = fib;
在使用调试器语句之后,我意识到memoize
只被调用一次,即使fib
被调用多次。
为什么会这样?更具体地说,fib = memoize(slowfib)
是如何工作的?
就像a = myFunction(b)
一样,fib = memoize(slowfib)
只执行一次。它的结果是一个新函数,存储在fib
中,每当执行fib(x)
时都会使用它。因此,调试器应该显示以下对每次调用都执行:
function(...args){
if (cache[args]) {
return cache[args];
}
const results = fn.apply(null, args);
cache[args] = results;
return results;
}