我用两个函数a()
和b()
编写了以下代码。
函数a()
有一个如下所示的循环,在该循环中它调用函数b()
。问题是第一个函数的循环计数器从b()
获取其值然后停止。两个函数之间没有传递任何值,它们唯一的共同点就是变量的名称。
有人能解释一下这里到底发生了什么吗?
根据我的理解,他们都应该拥有自己的x
副本,除非我声明x
是全球性的。
http://jsfiddle.net/rahulkadukar/s2gs9j05/
a();
function a() {
for (x = 0; x < 4; x++) {
console.log(x);
b();
console.log(x);
}
}
function b(){
for (x = 0; x < 4; x++) {
//Do nothing
}
}
上述功能的输出是
0
4
答案 0 :(得分:4)
由于您没有使用var
关键字将变量声明为局部变量,因此它们是全局变量。因此两个函数都使用相同的变量x
。将其更改为:
for (var x = 0; x < 4; x++)
并且它们将是每个函数中的局部变量。
答案 1 :(得分:1)
在你的情况下,x不是在for循环内部声明。所以它被假定为全局变量。使用:
a();
function a(){
for(var x = 0; x < 4; x++){
console.log(x);
b();
console.log(x);
}
}
function b(){
for(var x = 0; x < 4; x++){
//Do nothing
}
}