繁体   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