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

标签 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
    }
}

显然,我的这个程序的输出是带有 2 的单行,尽管如果我将其中一个 for 循环的索引名称从 i 更改为 ii 时它会起作用。

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

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

最佳答案

你需要这样做,

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

如果你声明为全局那么它将具有最近的值,所以你需要为每个函数提供唯一的值,你应该在函数内声明

关于函数中for循环索引的Javascript范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46109098/

相关文章:

F# 检查算术范围

javascript - ionic 后退按钮对齐到标题的右侧

javascript - 如何使用 ES6 HOF Javascript 在数组中查找重复对象(所有键值对应该相同)

python - python 中使用 for、if 和 set 实现更好的代码结构

scope - Angular.js : make variables survive page reload

c++ - 如何在不发生冲突的情况下处理不同层级的同名 namespace ?

javascript - 如果返回的单元格为空,则删除行

javascript - 左侧的文本溢出省略号

Windows 7 剩余的批处理文件参数

c - C 中两个初始化之间用分号分隔