为什么变量值在这里传递

时间:2014-11-02 06:28:26

标签: javascript scope

我用两个函数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

2 个答案:

答案 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 
  }
}