函数中for循环索引的Javascript范围

函数中for循环索引的Javascript范围,javascript,for-loop,scope,Javascript,For Loop,Scope,我有一些类似于Javascript中的以下代码: func1() { for(i = 2; i < 5; i ++) { console.log(i); func2(i); } } func2(x) { for(i = 100; i < 200; i ++) { do something } } func1(){ 对于(i=2;i

我有一些类似于Javascript中的以下代码:

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

func2(x) {
    for(i = 100; i < 200; i ++) {
      do something
    }
}
func1(){
对于(i=2;i<5;i++){
控制台日志(i);
第2(i)条;
}
}
函数2(x){
对于(i=100;i<200;i++){
做点什么
}
}
很明显,我的这个程序的输出是一行2,不过如果我将for循环的索引名从I改为ii,它就会工作

在javascript中,func1中for循环中的i在第一次调用func2后实际更改为100,这是一种预期行为吗


如果这是真的,有没有任何方法可以绕过这个问题,而不用对每个索引进行不同的命名?当嵌套了很多函数调用时,这非常烦人。

您需要这样做

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
    }
}
func1(){
对于(var i=2;i<5;i++){//在这里定义i
控制台日志(i);
第2(i)条;
}
}
函数2(x){
对于(var i=100;i<200;i++){//在这里定义i
做点什么
}
}

如果您声明为全局,那么它将具有最近的值,因此您需要每个函数的唯一值,您应该在函数中声明
i
声明在哪里?它的范围是什么?
i
在这个代码中是全局的(两个函数的变量相同),非常感谢!!我会在九分钟后接受答案。OP根本没有声明I,它只有在代码执行时才成为全局的,因为它没有声明。;-)