【问题标题】:Javascript scope of for loop index in a function函数中for循环索引的Javascript范围
【发布时间】:2017-09-08 05:15:31
【问题描述】:

我在 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 中的预期行为吗?

如果这是真的,是否有任何方法可以在不以不同方式命名每个索引的情况下解决此问题?当嵌套了很多函数调用时,这非常烦人。

【问题讨论】:

  • i 在哪里声明?它的范围是什么?
  • i 在此代码中是全局的(并且两个函数的变量相同)

标签: javascript for-loop scope


【解决方案1】:

你需要这样做,

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

如果您声明为全局,那么它将具有最近的值,因此您需要每个函数的唯一值,您应该在函数内声明

【讨论】:

  • 非常感谢!!我会在九分钟限制后接受答案。
  • OP 根本没有声明 i,它只有在代码执行时才变为全局,因为它没有声明。 ;-)
猜你喜欢
  • 2017-08-09
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多