簡體   English   中英

對於循環怪異的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM