这两个for循环之间的区别

时间:2012-01-19 13:12:45

标签: javascript

for (var ctr = arr.length - 1; ctr >= 0; ctr--) {

}

for (var ctr = 0; ctr < arr.length; ctr++) {

}
  1. 他们俩都做同样的工作,还是第一件做事 不同。
  2. 与上述相比,哪种方式最佳     2。

5 个答案:

答案 0 :(得分:4)

第一个将从数组的底部开始,并将达到顶部。第二个将从数组的顶部到底部开始。

如果您的阵列有{3,2,1}并且您在第一个循环中打印它,它将打印1,2,3,在第二个循环中它将打印3,2,1。

找到这个http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html,它讲述了提高javascript性能的方法。根据它

  

另一种改善循环性能的简单方法是将迭代器递减到0而不是递增到总长度。进行这种简单的更改可以节省高达原始执行时间50%的费用,具体取决于每次迭代的复杂程度。

所以第一个会提供更好的效果

希望这会对你有所帮助。

答案 1 :(得分:0)

第一个向后循环。第二个循环前进。

第一个将有更好的性能(因为第二个必须在每次循环时访问arr.length),但不是很明显,除非你处理很多对象或多次循环它们

您可以通过以下方式获得类似的性能提升:

for (var i = 0, j = arr.length; i < j; i++) {

}

答案 2 :(得分:0)

第一个循环遍历数组。第二个是元素出现的顺序。

答案 3 :(得分:0)

两个循环在数组遍历的方向上是不同的:

  1. 从最后一个元素开始,在第一个元素
  2. 中结束
  3. 反之亦然,从第一个元素开始,在最后一个元素结束
  4. 哪种是最好的,取决于您的需求。

    例如,考虑在数组中查找字符的第一个/最后一个匹配项的任务。

答案 4 :(得分:0)

它们都遍历数组的内容,但它们以相反的方向进行迭代。第一个元素从数组的最后一个元素开始,向后工作到第一个元素;第二个元素从第一个元素开始,向前工作到最后一个元素。

在大多数情况下,他们会提供相同的结果。但是,当您要从数组中删除元素以向后迭代时(第一个代码示例),这是常见的做法,因为删除元素后对索引的任何更改只会影响已经检查过的元素。 / p>