2011-05-22 58 views
2

多次阅读后,我仍不明白Stoyan Stefanov's "JavaScript Patterns"第76页的示例代码是如何工作的。我不是忍者呢。但对我来说,它读起来就像它只是存储一个空对象:JavaScript函数如何缓存其结果?

var myFunc = function (param) { 
    if (!myFunc.cache[param]) { 
    var result = {}; 
    // ... expensive operation ... 
    myFunc.cache[param] = result; 
    } 
    return myFunc.cache[param]; 
}; 
// cache storage 
myFunc.cache = {}; 

除非是看不见的“昂贵的操作”被存储回result,我没有看到被保留任何东西。

结果存储在哪里?

P.S .:我读过Caching the return results of a function from John Resig's Learning Advanced JavaScript,这是一个类似的练习,我得到了那一个。但代码在这里不同。

+1

“昂贵的操作”是填充'result'对象,然后将其存储在'myFunc'函数'cache'属性内的'param'名称下。 – 2011-05-22 20:01:30

回答

5

您已回答了您自己的问题 - 作者假定昂贵的操作将其结果存储在result中。如您所注意到的,缓存将仅包含空对象。

+0

嗯......我怀疑。在其他示例中,他很擅长解释对于练习很重要的部分代码,即使它们是为了清晰而抽象出来的。所以这一个扔了我......但我也认为它可能已经过了我的头,值得一问。 – parisminton 2011-05-22 20:25:16

1

它说//昂贵的操作 - 推理是,你实现代码中有哪些变量分配到结果VAR,或设置结果VAR的另一个对象(这是一个昂贵的操作的结果)

2

的结果被存储在名为'cache'的对象字面值中。代码的具体做法是:

当myFunc用param执行时,函数首先检查缓存。如果缓存中有'param'的值,则返回该值。如果不是,则执行昂贵的操作,然后缓存结果(以param作为关键字),因此下次使用相同的参数调用该缓存时将使用该缓存。