2012-08-13 23 views
3

這似乎是簡單的問題,但我不能找到這個答案..爲什麼要在循環中使用「var」內部?

舉例來說,如果我有以下對象:

var a = { 
    foo : "FOO", 
    bar : "BAR" 
    } 

現在,如果我想列出的性質在objec,我應該做到以下幾點:

for(var b in a) { 
    // do something 
    } 

或者,我可以這樣做:

for(b in a) { 
    // do something 
    } 

但是,這是這些方法之間的區別嗎?爲什麼要使用「var」或爲什麼不在循環中使用「var」?

回答

7

如果您使用之前未聲明的變量而不預先計劃var,則會創建一個全局變量。

function scope() { 
    a = "hi";  // global 
    var b = "ho"; // local 
} 

然而,

for (var b in a) { /* .. */ } 

var b; 
for (b in a) { /* .. */ } 
+0

+1擊敗了我。 – Fenton 2012-08-13 09:01:55

+2

''使用嚴格';' – jAndy 2012-08-13 09:02:42

+0

感謝yuo快速的回答,我學到了一些新的=) – John 2012-08-13 09:04:55

3

沒有變種之間沒有區別,b成爲全球性的,那麼將能夠與另一個定義交互b這可能會導致錯誤或意外的行爲。

例如,

function example1(){ 
for(b in a){ 
    example2(); 
    //now when b comes back, it will reference the last item from example2, 
    //essentially skipping the entire interior of a. 
} 
} 

function example2(){ 
for(b in a){ 
    //access a[b] 
} 
} 
+0

感謝一個很好的例子 – John 2012-08-13 09:05:47

1

如果不輸入var你會定義一個局部變量,因此,如果您不打算以後使用它,它是沒有意義的,你會消耗內存而不需要它

相關問題