2

可能重复:
在 jQuery 中缓存 $(this) 是最佳实践吗?

我很好奇,在同一个函数中,当$(this)被多次调用时,在后续调用中构造 jQuery 对象是否会产生额外的开销?换句话说,$(this)第一次调用时是否缓存?如果不是,那么将其存储$(this)在一个变量中并在$(this)随后需要时使用该变量会是一种更好的做法吗?

4

5 回答 5

4

$()是 jQuery 构造函数。

this是对调用的 DOM 元素的引用。

所以基本上, in $(this),您只是将thisin$()作为参数传递,以便您可以调用 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在 javascript 中(通常)表示对调用当前函数的对象的引用。

通常存储$(this)在局部变量中的目的是防止您多次调用 jQuery 函数$() 如果您必须多次使用它,缓存jQueryized应该有助于提高效率。 this

$只是一个有效的变量名字符,并用作变量名的第一个字符,通常是为了让程序员排队,它已经是一个 jQuery 对象(并且有相关的方法/属性可用)。

jQuery 中的 $this 与 $(this)

于 2012-08-01T23:50:18.163 回答
2

我经常看到这种构造:

var someFunc = function () {
    var that = $(this);
    // you could also cache like var $this = $(this);

    // do stuff here...
};

每次打电话$()都会有一些开销,但不会太多。如果您不缓存,我认为这不会引起注意$(this)。请参阅$(this) 的 jquery 缓存上的 SO 条目

于 2012-08-01T23:46:41.447 回答
2

每次$(this)计算表达式时,都会调用 jQuery 工厂函数,从而生成一个的jQuery 实例。但是,此过程的性能损失可以忽略不计。我曾经计算过它只需要几微秒(百万分之一秒)。

我个人并不担心$(this)在函数体内有多次。缓存 jQuery 实例 ( var $this = $(this);) 是一种选择,但我不这样做。(我碰巧觉得这个$this名字很难看,与 相比$( this ),我知道大多数人同意我的观点。)

于 2012-08-01T23:47:31.540 回答
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 对象的过程比从已生成的对象中引用某些内容需要更多的时间。

也就是说,对于大多数应用程序来说,差异可能可以忽略不计。

于 2012-08-01T23:48:29.040 回答
0

调用 $(this) 时,必须从已实例化的对象中调用它。$(this) 只是对该对象的引用,因此开销应该是最小的。

我可能是错的,但如果是,请纠正我。

于 2012-08-01T23:44:31.043 回答