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