我是否应该在jQuery中缓存$(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)); } 

是的,性能提升,因为它可以防止jQuery解释你的选择器。

这是选择器的解释,以及你将绕过的东西。 https://github.com/jquery/jquery/blob/master/src/core.js#L78-188

基本上,这部分

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

是的,有性能优势。

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

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

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

http://jsperf.com/jquery-cache-vs-no-cache

结果回应了这个post中的答案。