不放 (var i = 0) 会导致无限循环

not putting (var i = 0) causes infinite loop

在我的以下代码中,如果我不将 (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]]]]);

谁能解释一下为什么?

当你没有在函数内部使用 var 关键字声明变量时,它被视为全局变量。

我假设在你的 steamrollArray 函数中你也使用 i 并且变化是值,所以当它从函数 return 时它传递 arr.length 现在它比 arr.length 大并且循环永远不会结束。

总是在函数中用var声明变量,避免全局变量

也是一个很好的习惯