2011-05-22 51 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作爲關鍵字),因此下次使用相同的參數調用該緩存時將使用該緩存。