2013-03-11 83 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,

如果我们让事情更容易,我们稍后可能会遇到安全问题。

我希望这会满足您的要求:)