为什么这个循环停止一半?

时间:2016-04-09 23:23:23

标签: javascript for-loop

我无法弄清楚这里有什么不对,我试图遍历整个阵列,但它停在'c'处。

function foo() {
  var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W'];
  for (var i = 0; i < temp.length; i++) {
    console.log(temp.pop());
  }
}

foo() // => welc

4 个答案:

答案 0 :(得分:1)

它只用了一半时间,因为当你使用pop()时,它会自动缩短长度。 for循环检查每个循环完成时的长度。而是使用:

function foo() {
  var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W'];
  for (;temp.length > 0;) {
    console.log(temp.pop());
  }
}

你根本不需要柜台。所以我们甚至可以将其切换到while循环。

function foo() {
  var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W'];
  while (temp.length > 0) {
    console.log(temp.pop());
  }
}

答案 1 :(得分:0)

当你在for循环中弹出temp时,你正在改变temp的长度

答案 2 :(得分:0)

pop()方法删除数组的最后一个元素,并返回该元素,并使用它更改该数组的长度。

在你的循环中。您正在增加i并减少数组长度。所以它将来自:

  • 0(i) < 7 (array length)

  • 3(i) < 4 (array length)(这是您的c

  • 然后退出循环,因为i将为4,数组长度为3

因此,在您的情况下,您可以在console.log temp[i]中使用,以迭代所有数组。

function foo() {
  var temp = ['e', 'm', 'o', 'c', 'l', 'e', 'W'];
  for (var i = 0; i < temp.length; i++) {
     console.log(temp[i]);
  }
}

答案 3 :(得分:0)

pop()减小了数组的大小。你的代码是这样运行的(L是数组长度,我是索引)。

  L I
W 6 0
e 5 1
l 4 2
c 3 3

因此当索引不再小于数组长度(i < temp.length)时循环停止。

或许改变为:

for (var i = temp.length; temp.length > 0; i--) {
  console.log(temp.pop());
}