Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解释:jQuery缓存代码_Javascript_Jquery_Caching - Fatal编程技术网

Javascript 解释:jQuery缓存代码

Javascript 解释:jQuery缓存代码,javascript,jquery,caching,Javascript,Jquery,Caching,这将从缓存中返回元素(如果之前已选择该元素),或者选择、缓存并返回该元素。它对于更新从未发生显著变化的元素的内容(即,用户看到的计数器的父项,其中数字发生变化,但父项未发生变化)非常有用。代码如下: var $$ = (function() { var cache = {}; return (function (selector) { return cache[selector] || ( cache[selector] = jQuery (selector) )

这将从缓存中返回元素(如果之前已选择该元素),或者选择、缓存并返回该元素。它对于更新从未发生显著变化的元素的内容(即,用户看到的计数器的父项,其中数字发生变化,但父项未发生变化)非常有用。代码如下:

var $$ = (function() {
    var cache = {};
    return (function (selector) {
        return cache[selector] || ( cache[selector] = jQuery (selector) );
    });
})();
您可以这样使用它:

$$('#id')


现在。。。这到底是怎么回事?
$$
如何访问jQuery选择器?它与
$$
无关,从
$
开始,您就可以执行
var foo
$$
如何将传入的内容映射到
选择器
。我希望在
$$
中看到
var selector=argumentName
。另外,对我来说,
$
似乎没有设置为接收参数(例如,函数(输入){}),但它很容易做到


这一小段代码让我感到难以置信的困惑,如果能清晰一些,我将不胜感激。谢谢

这很简单。以下是等效代码,但为使其更明确,请使用未打包版本:

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();
如果您注意到了,首先您有一个匿名函数,我在这里将其命名为
generateCachingQuery
,它返回
$
最终使用的函数。这样做是为了只有内部函数(此处名为
queryFunc
)可以访问
cache
变量。其余的只是一个班轮,我在这里拆开,让它更清楚地做什么


编辑:为了清楚起见,
$
在上面的代码中是
queryFunc
,而不是
generateCachingQuery
。请注意,
queryFunc
selector
作为变量

这里<代码>jQuery(选择器)。它只是使用闭包将缓存保存在内存中,以便在查询DOM之前查找选择器。是的,我理解这一点,但是名称选择器如何映射到$$中传递的任何内容?在第一次运行$$('div')时,如果在
返回cache[selector]| |(cache[selector]=jQuery(selector))之前放入调试器选择器='div',这怎么可能?@JoshRobinson:因为代码中有两个函数。第一个函数,即没有任何参数的函数,会立即被调用(请注意代码段末尾的
();
),并返回第二个函数,该函数将
选择器
作为参数。噢,哇。。。我现在明白了哈哈!非常感谢克劳迪乌!
var $$ = (function() { // begin closure

  var cache = {}; // keep in memory through closure

  // The function that gets assigned to `$$`     
  return function(selector) {
    // If the element has already been queried (exists in the cache)
    // then return the element that was previously stored,
    // otherwise query the new element, add it to the cache and return it
    return cache[selector] || (cache[selector] = jQuery(selector));
  };
})(); // end closure