2013-12-11 21 views
0

工作時,我經常使用相同的節點使用變量,而不是重新聲明jQuery對象的選擇jQuery的對象,如$('.often')方面正如我想象,jQuery的每一次組成一個新的對象吧,但我也可以將已經創建的對象分配給變量:often=$('.often')除了可能更好的可讀性以外,將同一對象作爲變量使用可以提高腳本的性能?更好的是它在速度

+3

通常情況下,是的。 –

+0

取決於,在大多數情況下緩存選擇器是有意義的,使用一次或兩次,這不是真正必要的 – adeneo

+3

它不僅建立一個新的對象,它還必須積極查詢DOM! – Pointy

回答

2

調用具有相同參數的函數兩次是一個代碼味道......在任何語言。

函數的實現通常是將函數的調用者並不關心一個細節,但主叫方通常可以安全地假定調用該函數兩次比它的返回值賦值給一個局部變量更加昂貴。

除非函數的行爲不同,這取決於狀態(例如,在多線程應用程序),只需要調用一次。

這可能是款式比技術更多的事情,但如果我看到這樣的事情:

if (get_my_value("param") == 1) { 
    return "Got 1."; 
} 
if (get_my_value("param") == 2) { 
    return "Got 2."; 
} 

我將它改寫爲:

var my_value = get_my_value("param"); 
if (my_value == 1) { 
    return "Got 1."; 
} 
if (my_value == 2) { 
    return "Got 2."; 
} 

我會改寫原因它是:

  1. 如果get_my_value是昂貴的,我已經提高了性能。
  2. 通過減少重複代碼,我提高了可維護性。
  3. 通過減少重複代碼,我提高了可讀性。
+0

+1,但你在第二個代碼塊中有一對額外的關閉對象。 –

+0

@BlueSkies - 謝謝。固定。 – ken

2

我通常會說,是的,這是值得緩存中的對象的變量。但是,表現並不一定是我這樣做的理由。

根據約定,你會發現很多的JavaScript/jQuery的開發者前綴變量,指的jQuery對象與$,如

var $myObject = $('#id'); 

之所以這樣做,是你現在知道以後有無需再次換行變量,即它避免了這個錯誤:

var myObject = $('#id'); 
... much later on out of sight of that declaration 
var myJQueryObject = $(myObject); // No need for this, but its a common mistake. 
+0

我不明白。你使用變量的原因是爲了讓你可以有一個以'$'開頭的變量?我的意思是,如果你已經有一個變量,這可能是需要的,但它並不是很重要的緩存的原因。 –

+1

@Blue Skies據我所知,$只用於記住它是一個變量,它包含一個jQuery對象,而不是其他一些JavaScript實體,比如DOM節點,所以您不會再錯誤地將它包裝到jQuery對象中。 – Dmay

+0

@Dmay:對。我在說,這個答案中給出的緩存變量的原因沒有任何意義。可能有理由用'$'來標記某些變量,但是這假定已經決定需要一個變量。你首先想問一個變量是否需要。將'$'放在變量名的開頭與決定在您的環境中使用變量沒有任何關係。 –

相關問題