[英]for in loop weird behavior
我在for-in循環中有一些奇怪的行為。
碼:
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
我找不到這種行為背后的邏輯! 關鍵變量是按詞法定義的! 我的代碼磨損了什么?
您需要在兩個函數中都使用var
聲明key
。 當前,它是一個隱式全局變量。
function test(data){
for (var key in data){
//do sth;
}
}
因為是全局的,所以兩個函數中對key
引用都涉及相同的變量,因此test()
的循環將匿名函數中的循環弄亂了。
(如果需要,可以使用let
而不是var
,盡管在這種情況下沒有什么區別。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.