2010-10-04 30 views
16

我仍然在学习jQuery,但是我一直无法找到一个可靠的答案。我知道每当您使用jQuery选择器$(...)时,都会有性能成本,但$(this)会有很大的代价,您应该在使用它之前缓存它吗?

var $this = $(this); 
+0

作为参考,$(this)的成本是:http://stackoverflow.com/a/6587740/781695 – Medorator 2014-03-18 05:25:05

回答

11

如果你使用了很多,是的,它是有道理的,或链条,例如:

$(this).fadeIn().fadeOut().somethingElse(); 

如果贵吗?不是没有真正的事物的宏伟计划......但如果你在一个循环中成本倍增,所以最好是缓存它。如果你多次使用它,它是有道理的,多少意义取决于多少性能重要的代码我认为。

0

好问题,杰森。我想jQuery选择器功能可以非常有效地注意到this关键字。也就是说,如果可以避免重复调用相同的选择器,确实有意义。这就是方法链接进来有用:

$(this).hide().show().hide(); 

如果你要使用相同的选择有很多的不同点在同一个函数,我可能会做一个变量来存储的返回值jQuery选择器功能。缺少这一点,我不担心它,因为它的处理量非常非常小,特别是因为我确信jQuery库在检查此关键字(以及字符串类型)之前它运行任何正则表达式。

+5

jQuery永远不会看到'this'。它只会收到代码中当时提到的“this”的引用。它不能专门处理它。 – bambams 2010-10-04 16:55:57

+0

啊哈...这确实有道理。但是,与传递字符串选择器相比,在函数返回值之前,对元素的特定引用肯定不会花费太多处理。 – treeface 2010-10-04 17:15:00

+0

jQuery要做的第一个检查之一就是查看选择器是否是DOMElement,如果是这样,只需返回包装元素。我不介意使用'$ this'的人,因为养成缓存选择器的习惯是很好的做法,但是对于'this'来说,与你一起使用它是非常不相干的。 – 2012-08-07 16:50:04