【问题标题】:Is it safe to access a for loop counter after the loop?在循环之后访问 for 循环计数器是否安全?
【发布时间】:2015-11-13 05:41:16
【问题描述】:

这样好吗?

for (var i = 0; i < 10; i++) {
   ...
}
doSomething(i);

显然我希望i 在这里的值是 10。我的测试表明没问题,但这是定义的行为吗? (ES5)

【问题讨论】:

    标签: javascript for-loop scope


    【解决方案1】:

    是的,这是已定义的行为。当前版本的 JavaScript 没有块作用域,只有函数作用域。

    但是,JavaScript (ES6) 的新标准引入了 let 语句(var 的替代方案),它将尊重块范围。

    在以下代码中,您将无法在循环外访问i

    for (let i = 0; i < 10; i++) {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      这实际上是一个范围问题。您希望 i 在 for 循环之外可以访问吗?

      如果是这样,并且您想确保,请在循环外定义 i。比如:

      Duh...for 循环中的变量不会被阻塞(除非 ES6 中的 let 选项)。我已经知道了,但我累了,隔开了它。所以当然i 是可以访问的,在for 循环之外定义它是完全没有必要的。

      我打算留下这个来提醒自己,当我累了并且还没有完全考虑我的答案时,不要急于求成。

      var i;
      for(i = 0;i < 10; i++) {
      ...
      }
      doSomething(i);
      

      编辑:在仔细检查之后,无论如何 i 肯定是可访问的,这是已定义的行为,因此无论哪种方式都是安全的。

      【讨论】:

      • 这个答案不准确。这里发生的是 var 被提升并且不受块范围的影响。
      • 你是对的,当然。无论如何都要留下它,并进行编辑,以提醒自己当我太累并且还没有考虑清楚时不要太快地扣动答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多