2

我正在浏览John Resig 关于高级 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 = {};
4

2 回答 2

0

您可以使用可以对对象进行操作的自定义哈希函数。但是哈希函数会导致冲突,并且需要比您的简单示例更多的代码。

或者您可以将缓存设为 n 维,其中 n 是参数的数量。所以本质上是这样的:

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

假设选择器和 el 都可以用作对象键。您可能需要以另一种方式对它们进行字符串化。

于 2013-03-11T06:20:24.333 回答
0

只考虑一个数组元素,

JSON(JavaScript Object Notation)适用于通用平台,因此为了方便使用,您必须创建一个函数供您使用,

$$.cache[0]是您阅读后的简单方法cachekey

如果我们让事情变得更简单,我们以后可能会遇到安全问题。

我希望这能满足你的要求:)

于 2013-03-11T06:23:01.663 回答