2013-03-11 101 views
2

我正在通過John Resig's snippets on advanced JavaScript。在#19他提到了一種方法來緩存函數的返回值。緩存具有多個參數的函數的返回值的最佳方式是什麼?具有多個參數的函數的JavaScript緩存返回值

必須有比-ING字符串化的收到的參數和使用作爲緩存對象的關鍵一個更好的方法:

function $$(selector, el) { 
    var cacheKey = JSON.stringify(arguments); 
    if ($$.cache[cacheKey]) return $$.cache[cacheKey]; 

    return ($$.cache[cacheKey] = NodeListToArray((el || document).querySelectorAll(s))); 
} 
$$.cache = {}; 
+1

那麼,你有什麼更多的給結果的身份? – Vengarioth 2013-03-11 06:16:39

回答

0

你可以使用能對對象進行操作的自定義哈希函數。但散列函數會導致衝突,並且需要比簡單示例更多的代碼。

或者你可以使n維的緩存,其中n是參數的數量。所以本質上是這樣的:

function $$(selector, el) { 
    if ($$.cache[selector] && $$.cache[selector][el]) 
     return $$.cache[cacheKey][el]; 
    // etc. 

這假定selector和el都可以用作對象鍵。您可能需要以其他方式將它們串聯起來。

0

試想一個數組元素,

JSON(JavaScript對象符號)的工作原理與普通的平臺,因此,方便使用,您必須對您的使用建立一個功能,

這裏,$$.cache[0]是後您的簡單方法閱讀cachekey,

如果我們讓事情更容易,我們稍後可能會遇到安全問題。

我希望這會滿足您的要求:)