2010-10-04 69 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