我正在经历John Resig's snippets on advanced JavaScript。在#19上,他提到了一种缓存函数返回值的方法。缓存具有多个参数的函数的返回值的最佳方法是什么?
必须有一个更好的方法,比通过字符串化收到的参数并将其用作缓存对象的键:
function $$(selector, el) {
var cacheKey = JSON.stringify(arguments);
if ($$.cache[cacheKey]) return $$.cache[cacheKey];
return ($$.cache[cacheKey] = NodeListToArray( (el || document).querySelectorAll(s) ));
}
$$.cache = {};
答案 0 :(得分:0)
您可以使用可以对对象进行操作的自定义哈希函数。但哈希函数会导致冲突,并且需要比简单示例更多的代码。
或者你可以使缓存为n维,其中n是参数的数量。基本上就是这样:
function $$(selector, el) {
if ($$.cache[selector] && $$.cache[selector][el])
return $$.cache[cacheKey][el];
// etc.
这假设选择器和el都可以用作对象键。您可能需要以其他方式对它们进行字符串化。
答案 1 :(得分:0)
只考虑一个数组元素
JSON(JavaScript Object Notation)适用于通用平台,因此为了方便使用,您必须创建一个供您使用的函数,
此处,$$.cache[0]
是您阅读cachekey
,
如果我们让事情变得更容易,我们以后可能会遇到安全问题。
我希望这能满足你的要求:)