Javascript,阶乘,太难了


  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 的事实的一种手段。 递归循环不需要添加到缓存中,但如果添加了额外的行,那么数组将真正用作缓存,并且它将在后续调用函数时提供性能改进。

最新更新