var fact = (function(){
var cache = {'0': 1};
var func = function(n){
var result = 0;
if(typeof(cache[n]) === 'number'){
result = cache[n];
}
else{
result = cache[n] = n * func(n-1);
}
return result;
}
return func;
})();
console.log(fact(5)); //120
代码是这样的。我完全无法理解这段代码。它看起来像添加缓存,并添加缓存但这是如何工作的呢?我们不需要循环来添加缓存吗?
另外,返回 func; <- 这是什么?请完整解释
代码比需要的要复杂。 缓存数组未用作缓存;它被用作硬编码 0 的阶乘为 1 的事实的一种手段。 递归循环不需要添加到缓存中,但如果添加了额外的行,那么数组将真正用作缓存,并且它将在后续调用函数时提供性能改进。