在for语句中声明的变量似乎是全局的

variables declared in for-statments appear to be global

本文关键字:变量 全局 似乎是 声明 for 语句      更新时间:2023-09-26

这让我昨天在递归函数中遇到了奇怪的行为。我设法繁殖,也注意到其他行为。基本上,下面html/js中的i变量似乎是全局的。输出是4,然后是5。我用FF 40.0.2。同样的问题在上周最新版本的Node.js中也出现了。我没有记下它的版本号

给了什么?它应该是这样的吗?如果在每个for语句的上方声明循环变量,问题就解决了。

<head>
  <script>
    function foo(recurse)
    {
      if (recurse)
      {
        for (i = 0; i < 2; ++i)
        {
          foo(false);   
          console.log(i);
        }
      }
      else
      {
        for (i = 0; i < 4; ++i)
        {}
      }
    }
    foo(true);
  </script>
</head>
预期输出:

0
1
实际输出:

4

不确定该标记什么

问题是你没有声明它们,所以它们是隐式全局的。使它们为var s:

function foo(recurse) {
  if (recurse) {
    for (var i = 0; i < 2; ++i) {
//       ^^^
      foo(false);
      console.log(i);
    }
  } else {
    for (var i = 0; i < 4; ++i) {}
//       ^^^
  }
}
foo(true);

你也可以尝试严格模式,在那里你会得到一个未处理的错误Assignment to unresolved reference in strict mode code: i