2011-10-28 45 views
1

我有一個腳本這幾條線長,我有很多標誌類型的,像這樣是否需要JSlint警告「重新聲明var counter」?

var counter = 0; 
var carFlags = { 
Audio : counter++ , 
Bentley : counter++ , 
Chrysler : counter++ 
Datsun : counter++ 
... 
}; 

以後如果我創建了一個新的標誌對象以相同的方式

var counter = 0; 
var nameFlags = { 
Ashley : counter++ , 
Bronwyn : counter++ , 
Catherine : counter++ 
DakotaFanning : counter++ 
... 
}; 

它抱怨計數器用作更大聲明的一部分,但我認爲這裏完全可以接受。但是,我在這裏使用了兩次計數器,所以它警告redeclaration of var counter。我可以將var counter移動到頁面的頂部,但這可能會使其不太清楚counter的用途。多次使用var有沒有真正的問題?我有一個delete counter聲明,但它什麼也沒做。我應該將其更改爲delete window.counter

回答

1

不,沒有問題。事實上,在JavaScript中,變量聲明(使用var)會自動掛載到其封閉作用域的頂部。例如,以下內容:

var n = 5; 
if (n < 3) { 
    var q = 2; 
    var n = 4; 
} 

等同於:

var q, n=5; 
if (n < 3) { 
    q = 2; 
    n = 4; 
} 
+0

這樣的當時的分支if語句並不構成變量範圍(如在C/C++)? –

+0

@StefanMajewsky正確的,JavaScript中的變量沒有被限定爲像if語句的then分支那樣的代碼塊。 JavaScript變量僅限於函數或全局範圍。 –

1

給他們唯一的名稱,你不會有任何問題。

var carCounter = 0; 
var nameCounter = 0; 

你也不會因爲兩個不同的任務使用相同的變量而難以找到錯誤。

+2

很好的建議。但是如果你有兩個(unnested)for循環,你應該命名一個'var i',另一個'var j'? – puk

3

我不太確定你的範圍在哪裏,但是如果它是全球範圍的話,那麼delete counter實際上什麼都不會做。也沒有必要delete window.counter反正(如果我們在全球範圍內的瀏覽器環境)是同樣的事情。

如果您希望重新使用變量 - 一個簡單的任務會做:

counter = 0 

原因的JSLint抱怨是,我認爲,要提醒你,你可能意味着重新使用計數器並意外地輸入了var(發生在我身上不止一次)。

聲明相同變量兩次(除了稍微增加用戶瀏覽器在加載頁面時必須下載的JS文件的大小)在相同範圍中絕對沒有壞處。

編輯:

有,當然,爲什麼你會使用同一個名稱的問題...