Javascript 用于循环中的奇怪行为
我在for-in循环中有一些奇怪的行为 代码:Javascript 用于循环中的奇怪行为,javascript,for-in-loop,lexical-scope,Javascript,For In Loop,Lexical Scope,我在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}); co
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 r
但我明白了:
q c w c e c r c
我找不到这种行为背后的逻辑!
关键变量的作用域是词汇性的!
我的代码出了什么问题?您需要在这两个函数中使用
var
声明key
。目前,它是一个隐式全局变量
function test(data){
for (var key in data){
//do sth;
}
}
由于它是全局的,两个函数中对键的引用都涉及相同的变量,因此test()
中的循环会弄乱匿名函数中的循环
(如果愿意,您可以使用let
而不是var
,尽管在本例中没有区别。)您需要在两个函数中使用var
声明key
。目前,它是一个隐式全局变量
function test(data){
for (var key in data){
//do sth;
}
}
由于它是全局的,两个函数中对键的引用都涉及相同的变量,因此test()
中的循环会弄乱匿名函数中的循环
(如果您愿意,您可以使用let
而不是var
,尽管在本例中没有区别。)记住let
或var
您想要的级别上的任何标识符记住let
或var
您想要的级别上的任何标识符