2016-01-24 77 views
-3
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 

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

也,return func; < - 这是什么? 请全部解释

+0

我的机器工作得很好 – YankeeCki

+0

事实是一个返回'func'的iife(立即调用的函数表达式)。由于JavaScript支持头等功能,这是可能的。 – ZachPerkitny

回答

1

代码比需要的更复杂。缓存阵列不被用作缓存;它被用作对0的阶乘为1的事实进行硬编码的手段。递归循环不需要添加到缓存中,但是如果添加了额外的行,那么该数组实际上会起到缓存,并且它会在随后调用函数时提供性能改进。

+0

非常感谢你!非常有帮助! – YankeeCki