2011-07-25 153 views
2

在下面的示例中,是通過for..in循環爲每次迭代創建的新變量'y'嗎?或者是變量聲明被提升到函數的頂部,並在每次迭代時重新使用?JavaScript函數級範圍

function example() { 
    var x; 
    for(x in obj) { 
     var y = obj[x]; 
    } 
} 

感謝

回答

3

它的懸掛,因爲for循環對範圍沒有任何影響。

+0

我想,只是想確定一下。謝謝。 – Steve

0

y是被替換的相同變量。做一個新的,你會用

function example() { 
    var x; 
    var y= new Array; 
    for(x in obj) { 
     y[x] = obj[x]; 
    } 
} 
+0

恐怕這不對。如果你將循環分成兩個語句:'var y'和'y [x] = obj [x]',然後在這兩個語句之間讀取'y'的值,你會發現'y'仍然包含陣列。也就是說,它不是一個新的未定義的變量。 – gilly3

+0

y應該仍然包含obj數組項目,但是現在y可以從obj數組中索引每個項目。我相信他問,如果y只持有obj數組中的最後一項。這是正確的,通過使用y [x] y將包含與obj相同的數組。 –

+0

那爲什麼要用'var'關鍵字? – gilly3

0

您可以test this for yourself

var obj = { 
    name: "Dan", 
    surname: "Tao" 
}; 

var x; 
for (x in obj) { 
    var y = obj[x]; 
} 
alert(y); 

一個警告框將與文本Tao出現,表明yfor循環的範圍之外訪問。