如果在jQuery中多次使用$(this),是否应该将其缓存在jQuery中?

如果在jQuery中多次使用$(this),是否应该将其缓存在jQuery中?,jquery,performance,jquery-selectors,Jquery,Performance,Jquery Selectors,我知道,如果您多次使用选择器,则应该缓存选择器的结果。例如: var $selected = $('.some-selected-element'); process($selected); doStuff($selected); 但是,如果多次使用,缓存$(this)是否有任何性能优势 $('.some-selector').hover(function () { if (!$(this).hasClass('some-other-class')) { $(this

我知道,如果您多次使用选择器,则应该缓存选择器的结果。例如:

var $selected = $('.some-selected-element');

process($selected);
doStuff($selected);
但是,如果多次使用,缓存
$(this)
是否有任何性能优势

$('.some-selector').hover(function () {
    if (!$(this).hasClass('some-other-class')) {
        $(this).addClass('another-class');
    }
    process($(this));
}

是的,有性能优势


缓存
$(this)
的结果可以避免对
$()
函数的多次调用,避免创建多个不同的jQuery对象,这些对象都引用同一个元素。

当定义时,$()函数会查找元素的DOM节点,并将原型方法应用于尚未添加它们的浏览器(IE浏览器)。因此,不断调用它将执行此操作。将$()函数调用的输出缓存到一个变量,这对性能和可读性都有好处。

是的,性能有所提高,因为它可以防止jQuery解释您的选择器

以下是选择器的解释,以及您将要绕过的内容

本质上,这一部分

if ( selector.nodeType ) {
    this.context = this[0] = selector;
    this.length = 1;
    return this;
}

jsperf.com是评估JavaScript性能的一个很好的资源,我最近经常使用它。例如,下面的测试将缓存jQuery元素的性能评估为非缓存jQuery元素的性能:


结果与此线程中的答案相呼应。

是的,您应该这样做-调用函数并多次返回结果jQuery不会将原型方法添加到元素中。您会与MooTools(或其他js库)混淆从这个意义上讲,jQuery保持元素不变,而是使用jQuery对象进行处理。