2016-07-15 104 views
0

我有一個奇怪的行爲與一個for-in循環。for循環奇怪的行爲

代碼:

var obj = { 
    q:1, 
    w:2, 
    e:4, 
    r:5 
}; 

function test(data) { 
    for (key in data) { 
     //do sth; 
    } 
} 

!function() { 
    for (key in obj) { 
     console.log(key); 
     test({a:1,b:2,c:3}); 
     console.log(key); 
    } 
}(); 

如我所料,輸出應爲某事像這樣:

qqwweerr

,但我得到這個:

qcwcecrc

我找不到th這種行爲背後的邏輯! 關鍵變量的範圍是詞法! 我的代碼有什麼問題?

+1

記得'let'或'在水平var'任何標識,你希望他們 –

回答

3

您需要在兩個函數中聲明keyvar。目前,這是一個隱含的全局變量。

function test(data){ 
    for (var key in data){ 
     //do sth; 
    } 
} 

因爲它是全球性的,在這兩個功能key引用涉及相同的變量,所以在test()食堂在匿名函數中循環的循環。

(你可以使用let代替var如果你想,但在這種情況下,也就沒有什麼區別。)