Javascript,阶乘,太难了

时间:2016-01-24 10:48:11

标签: 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

代码是这样的。 我完全无法理解这段代码。 它看起来像添加缓存,并添加缓存 但这是如何工作的? 我们不需要循环来添加缓存吗?

另外,返回功能; < - 这是什么? 请完整解释

1 个答案:

答案 0 :(得分:0)

代码比需要的更复杂。缓存阵列不用作缓存;它被用作硬编码0的阶乘为1的事实。递归循环不需要添加到缓存中,但如果添加了额外的行,那么数组实际上可以用作缓存,它可以在后续调用函数时提高性能。