【问题标题】:not putting (var i = 0) causes infinite loop不放 (var i = 0) 导致无限循环
【发布时间】:2017-06-24 12:48:24
【问题描述】:

在我的以下代码中,如果我没有将 (var i = 0...) 放入 for 循环中,我会得到一个无限循环。

function steamrollArray(arr) {
 var newArr = [];
 for (i = 0; i < arr.length; i++) {
  if (Array.isArray(arr[i])) {
    newArr = newArr.concat(steamrollArray(arr[i]));
  } else {
    newArr.push(arr[i]);
  }
 }
 return newArr;
}

steamrollArray([1, [], [3, [[4]]]]);

谁能解释一下原因?

【问题讨论】:

  • 类似problem。在这种情况下,循环提前终止而不是无限循环(但两个问题是相同的)。
  • 全局变量ftw!始终定义变量。
  • 感谢大家的快速回复。我将始终声明我的变量。

标签: javascript recursion infinite-loop


【解决方案1】:

如果您没有在函数内使用 var 关键字声明变量,则它被视为全局变量。

我假设在您的steamrollArray 函数中您还使用i 并且更改是值,因此它在从函数返回时传递arr.length,现在它比arr.length 更大并且循环永远不会结束。

总是在函数中用var 声明变量,避免全局变量也是一个好习惯

【讨论】:

  • 无需假设任何事情......所有代码都在那里
  • 或者let 如果您不需要循环外的变量。这有助于记忆
  • @charlietfl 没错,我没注意到是同一个函数
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 2018-06-25
  • 2018-08-07
  • 2020-08-27
  • 2021-05-07
  • 2012-08-24
相关资源
最近更新 更多