2010-03-09 47 views
0

在VS2008下面的代碼給了我一個「變量已經被定義」警告:變量聲明警告在VS2008

if (someVar) { 
    var a = 1; 
} 
else { 
    var a = 2; 
} 

警告後第二var a = ...給出。爲了根治這一警告我做:

var a; 
if (someVar) { 
    a = 1; 
} 
else { 
    a = 2; 
} 

但是,這是做了正確的方法是什麼?

感謝,

AJ

回答

4

是的,這是做了正確的道路。在javascript中沒有塊範圍;只有功能範圍和全球範圍。

,你也可以給使用匿名函數,每個「塊」的功能範圍,雖然它不是在這種情況下非常實用:

if (someVar) { 
    (function() { 
    var a = 1; 
    })(); 
} 
else { 
    (function() { 
    var a = 2; 
    })(); 
} 

作爲一個方面說明,這也是爲什麼for (var i = 0; ...)贊成var i; for (i = 0; ...)氣餒,以避免同一函數中的兩個連續循環都嘗試聲明變量i

+0

很好的解釋。 – OregonGhost 2010-03-09 09:14:11

+0

感謝您的詳細解答。 – 2010-03-09 09:58:40

1

這取決於您以後如何使用這些變量。

如果它們涉及同一個對象,那麼這是正確的方法。

如果它們涉及不同的對象,那麼我會重命名這些變量,因爲這樣可以防止將來出現維護問題。

0

無論哪種方式都是完全有效和正確的(兩個示例都確保使用var關鍵字聲明該變量),但通常最佳做法是在當前代碼塊的頂部聲明變量,如第二個示例中所示。