2011-06-08 67 views
2

可能重複:
Declaring Multiple Variables in JavaScript與jQuery中的分號相比,逗號有什麼好處?

我在jQuery的設置一些變量,有人建議我做這種方式:

var $wrapper = that.parents(".wrapper"), 
$prettyCheckBox0 = $wrapper.find(".prettyCheckbox small:eq(0)"), 
$prettyCheckBox1 = $wrapper.find(".prettyCheckbox small:eq(1)"), 
$prettyCheckBox2 = $wrapper.find(".prettyCheckbox small:eq(2)"), 
standard = $prettyCheckBox0.parents("span").parents("label").prev("input").val(), 
professional = $prettyCheckBox1.parents("span").parents("label").prev("input").val(), 
premium = $prettyCheckBox2.parents("span").parents("label").prev("input").val(); 

雖然這個作品,我想知道如果有人有理由在分號上選擇逗號。它是如何工作的?它似乎會導致語法錯誤。另外,爲什麼有一個var

回答

5

你的問題的結尾包含答案的開始:var可用於在同一語句定義多個變量,像這樣:

var a = 1, b = "foo", bar = xyzzy(), baz = $('#something'); 

這是你的片段發生了什麼,以及它的等效到

var a = 1; 
var b = "foo"; 
var bar = xyzzy(); 
var baz = $('#something'); 

選擇一個比另一個沒有客觀的好處,這是編碼風格/約定的問題。

+0

* [提示生氣雙方陣營對我猛撲過來不讚美唯一正確的方法來初始化變量,更糟的是,用於支持明顯不如異端的其他方式的忠實信徒] * – Piskvor 2011-06-08 15:17:21

+0

不要擔心...我做了同樣的事情。我還沒有得到任何討厭的評論。 – 2011-06-08 15:21:02

3

您發佈的示例是一個包含多個var聲明的長單行。

末把一個分號會要求你每一次重複var關鍵字(爲了保持技術上的東西是相同的):

var $wrapper = that.parents(".wrapper"); 
var $prettyCheckBox0 = $wrapper.find(".prettyCheckbox small:eq(0)"); 
// and so on 

我不知道如果任一在技術上是較好的。就個人而言,我更喜歡分號和重複我的var關鍵字,所以所有內容都排成一行,更具可讀性,更易於維護,因爲我不必擔心在添加新聲明時丟失逗號(但這絕對是個人偏好)。

2

基本上,你已經定義了一個逗號分隔的名稱和初始化變量列表,這就是爲什麼你不需要重複var

在分號上使用逗號的主要優點可能是您不必經常輸入var。否則,這兩種機制基本上是一樣的。

+0

我可以請求你看看關於不同主題的jquery問題:http://stackoverflow.com/questions/13137404/jquery-find-div-class-name-at-a-certain-position-while滾動? – 2012-10-31 07:37:07

+0

@IstiaqueAhmed:我去了,我看了,我沒有理解;我離開了。我不知道我會得到任何JavaScript問題的贊成票!我不確定什麼情況的特定組合能夠讓我回答一個足夠好的JavaScript問題以獲得最佳答案,但問題中JS的行數多於我寫的JS語料庫中的數量。 – 2012-10-31 16:18:07

1

認爲這是因爲在JavaScript中,你可以初始化變量一樣:

var $a=0,$b=2; 

這看起來適合於小變量,但我認爲它看起來醜陋和具有可維護性差做了如此大的操作作爲你的榜樣。出於可讀性的目的,當你有一個變量的大行時,我會堅持用分號。

比較:

var $wrapper   = that.parents(".wrapper"); 
var $prettyCheckBox0 = $wrapper.find(".prettyCheckbox small:eq(0)"); 
var $prettyCheckBox1 = $wrapper.find(".prettyCheckbox small:eq(1)"); 
var $prettyCheckBox2 = $wrapper.find(".prettyCheckbox small:eq(2)"); 
var standard   = $prettyCheckBox0.parents("span").parents("label").prev("input").val(); 
var professional  = $prettyCheckBox1.parents("span").parents("label").prev("input").val(); 
var premium   = $prettyCheckBox2.parents("span").parents("label").prev("input").val(); 

如果有任何性能差異,這是可以忽略不計。但是這個版本對程序員來說更容易閱讀和理解。也很容易看到一些變量有'$',有些不是......有意爲之?

1

看看MDC docs for the var keyword

您可以使用var關鍵字一次,並一次初始化多個變量。這有幾個優點:

  • 文件大小。您可以通過忽略var關鍵字每次保存幾個字節。
  • 代碼清潔。你可以很好地縮進代碼(你的例子不這樣做),所以你可以一眼就看到所有的代碼行都是初始化變量。
  • 邏輯。變量定義將始終由JS解析器「懸掛」到函數的頂部。如果您將所有變量定義放在代碼的頂部,並帶有一個var關鍵字,它會提醒您它們在函數的一開始就定義了一次。