JavaScript缓存返回值的函数有多个参数

JavaScript cache return value of a function with more than one parameter

本文关键字:参数 函数 缓存 返回值 JavaScript      更新时间:2023-09-26

我正在浏览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 = {};

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

或者您可以将缓存设置为n维,其中n是参数的数量。也就是:

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

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

考虑一个数组元素,

JSON (JavaScript对象表示法)在通用平台上工作,所以为了方便使用,你必须创建一个函数,

这里,$$.cache[0]是你阅读cachekey后的简单方法,

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

我希望这能满足你的要求。