我很好奇,在同一个函数中,当多次调用$(this)
时,是否会在后续调用中产生额外的开销来构造jQuery对象?换句话说,第一次调用它时是$(this)
缓存了吗?如果没有,将$(this)
存储在变量中并在随后需要$(this)
时使用该变量会更好吗?
答案 0 :(得分:4)
$()
是jQuery构造函数。
this
是对DOM调用元素的引用。
基本上,在$(this)
中,您只是将this
中的$()
作为参数传递,以便您可以调用jQuery方法和函数。
http://www.learningjquery.com/2007/08/what-is-this
好的数字:http://jsperf.com/jquery-this-vs-this-vs-chain/2
您通常使用var $this = $(this);
来避免创建新的jQuery对象而不是必需的。如果是下面的代码,则只创建一个对象而不是两个/四个。它与可链接性完全无关。
this
(通常)表示对调用当前函数的对象的引用。
通常,将$(this)
存储在局部变量中的目的是阻止您多次调用jQuery函数$()
,缓存 jQueryized this应该有助于提高效率。
$
只是一个有效的变量名字符,用作变量名通常的第一个字符,以便程序员将其作为jQuery对象排队(并且具有关联性)方法/属性可用)。
答案 1 :(得分:2)
我已经看到这种结构经常使用:
var someFunc = function () {
var that = $(this);
// you could also cache like var $this = $(this);
// do stuff here...
};
每次拨打$()
时,拨打电话都会有一些开销但不多。如果你没有缓存$(this)
,我认为这不会引起注意。见SO entry on jquery cache of $(this)
答案 2 :(得分:2)
每次计算表达式$(this)
时,都会调用jQuery工厂函数,从而生成 new jQuery实例。但是,这个过程的性能损失可以忽略不计。我曾经计算过它只需要几微秒(百万分之一秒)。
我个人不担心在函数体中多次$(this)
。缓存jQuery实例(var $this = $(this);
)是一种选择,但我不这样做。 (与$this
相比,我碰巧发现$( this )
这个名字很丑陋,我知道大多数人不在这里与我达成一致。)
答案 3 :(得分:2)
我做了一个快速测试,看看是否有使用$:
构建jQuery对象的额外开销var start = (new Date).getTime();
for(var i=0; i<1000000; i++)
{
var testClass = $("#testDiv").attr("class");
}
var end = (new Date).getTime();
alert(end-start);
我在这里所做的就是运行代码1,000,000次以查看将页面上的jQuery对象的类存储到变量所需的时间。花了大约4.286秒。然后我修改它以引用已存储的对象:
var start = (new Date).getTime();
var testDiv = $("#testDiv");
for(var i=0; i<1000000; i++)
{
var testClass = testDiv.attr("class");
}
var end = (new Date).getTime();
alert(end-start);
这只花了1.254秒。虽然这不是您所要求的,但它确实强调生成jQuery对象的过程比从已生成的对象引用某些内容需要更多的时间。
尽管如此,大多数应用程序的差异可能会微不足道。
答案 4 :(得分:0)
当调用$(this)时,必须从已经实例化的对象中调用它。 $(this)只是对该对象的引用,因此,开销应该是最小的。
我可能是错的,但如果是这样,请纠正我。