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