for in 循环奇怪的行为
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);
}
}();
如我所料,输出应该是这样的:
q q w w e r
但我明白了:
q c w c e c r c
我找不到这种行为背后的逻辑!
关键变量是词法范围的!
我的代码有什么问题?
您需要在两个函数中声明 key
和 var
。目前,它是一个隐式全局变量。
function test(data){
for (var key in data){
//do sth;
}
}
因为它是全局的,所以在两个函数中对 key
的引用涉及相同的变量,所以 test()
中的循环弄乱了匿名函数中的循环。
(如果您愿意,您可以使用 let
而不是 var
,但在这种情况下没有任何区别。)
我在 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);
}
}();
如我所料,输出应该是这样的:
q q w w e r
但我明白了:
q c w c e c r c
我找不到这种行为背后的逻辑! 关键变量是词法范围的! 我的代码有什么问题?
您需要在两个函数中声明 key
和 var
。目前,它是一个隐式全局变量。
function test(data){
for (var key in data){
//do sth;
}
}
因为它是全局的,所以在两个函数中对 key
的引用涉及相同的变量,所以 test()
中的循环弄乱了匿名函数中的循环。
(如果您愿意,您可以使用 let
而不是 var
,但在这种情况下没有任何区别。)