的Javascript范围

问题描述:

我在Javascript类似于下面的代码的东西:的Javascript范围

func1() { 
    for(i = 2; i < 5; i ++) { 
     console.log(i); 
     func2(i); 
    } 
} 

func2(x) { 
    for(i = 100; i < 200; i ++) { 
     do something 
    } 
} 

显然,输出为我的这个方案是用2一个单行,但它的工作,如果我例如,将其中一个for循环的索引名称从i更改为ii。

这是JavaScript中的预期行为,我在func1 for循环中实际更改为100后第一次调用func2?

如果这是真的有什么办法解决这个问题,而不是命名每个索引不同?当有很多函数调用嵌套时,这是非常烦人的。

+0

在哪里'我'宣布?它的范围是什么? –

+0

此代码中的'i'是全局的(并且这两个函数都是相同的变量) –

你需要做的就是这样,

func1() { 
    for(var i = 2; i < 5; i ++) { // define i here 
     console.log(i); 
     func2(i); 
    } 
} 

func2(x) { 
    for(var i = 100; i < 200; i ++) { // define i here 
     do something 
    } 
} 

如果声明为全局那么它将最近值,因为你需要为每个功能独特的淡水河谷,你应该函数内声明

+0

非常感谢!我会在九分钟限制后接受答案。 – cr001

+0

OP没有声明* i *,它只在代码执行时变成全局的,因为它没有被声明。 ;-) – RobG