javascript - 解释: jQuery Caching Code

标签 javascript jquery caching

snippet of code如果先前已选择元素,则将从缓存中返回一个元素,或者选择、缓存并返回该元素。它对于更新从未发生显着变化的元素的内容很有用(即,用户看到的计数器的父级,其中数字发生变化但父级没有)。代码如下:

var $$ = (function() {
    var cache = {};
    return (function (selector) {
        return cache[selector] || ( cache[selector] = jQuery (selector) );
    });
})();

你可以这样使用它:

$$('#id')


现在……这到底是怎么回事? $$ 如何访问 jQuery 选择器?它与以 $ 开头的 $$ 无关,您也可以使用 var foo$$ 如何将传递给它的内容映射到 selector。我希望在 $$ 中看到 var selector = argumentName。另外,在我看来 $$ 似乎没有设置为接收参数(例如 function(input){} ),但它很容易接收参数吗?

这一小段代码让我非常困惑,如果能清晰一些,我将不胜感激。谢谢!

最佳答案

这很简单。这是等效的代码,但在解压缩版本中以使其更明确:

function generateCachingJQuery() {
    var cache = {};
    function queryFunc(selector) {
        if (cache[selector]) {
            return cache[selector];
        } 
        else {
            cache[selector] = jQuery(selector); //same as $(selector)
            return cache[selector];
        }
    }
    return queryFunc;
}
var $$ = generateCachingJQuery();

如果您注意到,首先您有一个匿名函数 - 我在这里命名为 generateCachingJQuery - 它返回 $$ 最终成为的函数。这样做是为了让内部函数(此处名为 queryFunc)可以访问 cache 变量。其余的只是一个单行文件,我在这里解压它以使其更清楚它在做什么。

编辑:需要明确的是,$$ 在上面的代码中最终变成了 queryFunc,而不是 generateCachingJQuery。请注意,queryFuncselector 作为变量。

关于javascript - 解释: jQuery Caching Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554618/

相关文章:

javascript - 如何每 5 秒旋转一次背景图像? javascript?

javascript - 如何使用 sequelize 在 where 子句中添加 "or"语句

java - 将数据传递到 jquery 的 getJSON() 时出现问题 - 不接受 map

c# - 使用单例进行缓存

scala - 如何从 Play 缓存中获取对象(scala)

javascript - 使用 React/JSX 生成非 JavaScript 代码

javascript - JQuery 从第二个零开始播放 html5 视频,但如果用户暂停视频,则保留当前帧

jquery - 带有两个 div 的 slideToggle

javascript - 在鼠标悬停事件上使用 Javascript 隐藏内容

c - 每个级别的内存层次结构的延迟测量