不放 (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
声明变量,避免全局变量
也是一个很好的习惯
在我的以下代码中,如果我不将 (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
声明变量,避免全局变量