为什么这不会导致无限循环?

时间:2017-04-12 20:59:51

标签: javascript arrays for-loop infinite-loop

来自雄辩的JavaScript。由于“i”从-1开始并且在每个循环中减1,所以这应该永远不会达到结束条件“i> = 0”。但代码可以运作。

function arrayToList(array) {
  var list = null;
  for (var i = array.length - 1; i >= 0; i--)
    list = {value: array[i], rest: list};
  return list;
}

console.log(arrayToList([]));
//null

3 个答案:

答案 0 :(得分:14)

你的分析是错误的。如果array为空,i以-1开头,则条件i >= 0失败,因此循环永远不会执行。循环到 continue 必须满足条件,而不是循环退出。

答案 1 :(得分:1)

function arrayToList(array) {
  var list = null;
  for (var i = array.length - 1; i >= 0; i--) // i = -1, i is not greater than or equal 0 so it never enters the loop
    list = {value: array[i], rest: list};
  // list is null and loop finished with i -1
  return list;
}

console.log(arrayToList([]));
//null

所以基本上跟随的是运行的语句:

  1. arrayToList([]);
  2. var list = null;
  3. var i = array.length - 1 // -1
  4. 检查i> = 0,这是假的
  5. 返回列表;
  6. 的console.log(空)

答案 2 :(得分:1)

for (statement 1; statement 2; statement 3) {
    code block to be executed
}

语句1在循环(代码块)开始之前执行。

语句2定义了运行循环的条件(代码块)。

每次执行循环(代码块)后都会执行语句3。

声明2为false,因此未输入循环体