2014-11-02 127 views
0

传递的变量值我写了下面的代码有两个功能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 
    } 
} 

上述功能的输出是

+1

这就是为什么你应该在严格模式下始终运行,因为它会将此作为一个作为尝试使用未声明的变量的错误是严格模式中的错误,而不是隐式创建全局变量。 – jfriend00 2014-11-02 06:33:16

回答

4

由于没有用的var关键字声明变量与局部变量,它们是全局变量。所以这两个函数都使用相同的变量x。将其更改为:

for (var x = 0; x < 4; x++) 

它们将是每个函数中的局部变量。

在你的情况下,x是不是loop.so其内声明
+0

所以,除非我明确使用var关键字,否则变量是全局的。我不知道,谢谢你的答案。 – 2014-11-02 06:31:34

1

被假定为全球variable.use这样的:

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 
    } 
} 
相关问题