对于javascript中的循环变体

Ash*_*thy 13 javascript for-loop

这个网站上有一个for循环变化列表.我可以理解for(var i=0, len=arr.length; i<len ;i++)循环的用法(在哪里arr是一个数组),因为arr.length在每一步都没有计算,似乎有一个边际性能增益.但是使用其他变体有什么好处?例如,循环就像

  1. for (var i=arr.length; i--;)
  2. for (var i=0, each; each = arr[i]; i++)

通过使用不同的for循环变化,性能是否有任何明显的变化?我通常for(var i=0, len=arr.length; i<len ;i++)甚至用于非常大的数组.所以我只是想知道我是否遗漏了一些东西.

jAn*_*ndy 7

人们普遍认为这是一个颠倒的while循环

var loop = arr.length;
while( loop-- ) {
}
Run Code Online (Sandbox Code Playgroud)

是C语言中最快的循环类型(这也适用于ECMAscript很长一段时间,但我认为所有最新的引擎在今天的标准循环中都非常均匀).(jsperf)

你的"变体"实际上并没有变化,只是在conditional语句中使用不同的语句for-loop(实际上这使它成为变体......!).喜欢

1) for (var i=arr.length; i--;)

只需使用条件部分for-loop来执行两者,迭代并检查是否i具有真值.一旦i变成0循环就会结束.

2) for (var i=0, each; each = arr[i]; i++)

这里我们从每次迭代中获取元素,因此我们可以直接访问循环体内的元素.当您厌倦了总是重复时,通常会使用此功能arr[ n ].

.length在循环之前,你在缓存属性方面做得很好.正如您正确提到的,它更快,因为我们不必在每次迭代中访问该属性.除此之外,在处理"实时结构"时,有时也需要DOM脚本HTMLCollections.