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

时间:2017-06-24 12:48:24

标签: javascript recursion infinite-loop

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

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]]]]);

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

当你没有在函数内部使用print (L) ['60', '32', '32', '32', '32,33', '35', '34,35,36'] df1['a'] = df1['a'].astype(str) d = df1.set_index('a')['b'].to_dict() print (d) {'32': 'A', '60': 'F', '33': 'B', '35': 'D', '34': 'C', '36': 'E'} L = [[d[y] for y in x.split(',')] for x in L] print (L) [['F'], ['A'], ['A'], ['A'], ['A', 'B'], ['D'], ['C', 'D', 'E']] 关键字声明变量时,它将被视为全局变量。

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

总是在函数中使用arr.length声明变量,这也是避免全局变量的一个很好的实践