根据 jsperf 的测试具有这种形式的 javascript 中的 for 循环:
for (var i = 0, item; item = itemsArray[i++];){
item = Math.random();
}
比典型的 for 循环快几个数量级,即使在 IE8 等较旧的浏览器中也是如此。我还没有找到对这个循环结构的另一个引用,我想知道为什么它要快得多?
此外,我还查看了一些 javascript 库的源代码,例如 jQuery和 Knockoutjs并且他们不在代码中使用此构造。
这让我产生了怀疑。如果这种形式的循环要快得多,为什么由更聪明的人编写的流行库不使用它?
我是否错过了这个循环不如表面上看起来那么好的地方?
最佳答案
Am I missing something where this loop is not as good as it looks on the surface?
每当您的 itemsArray
中的单个 item
为假时,您的条件就无法达到预期。
实际上,这也是为什么您的测试说它会更快的原因,那只是因为它甚至没有像 itemsArray[0] = 0
那样进行第一次迭代。一个updated jsperf迭代 [1..1001]
表明 for 循环的执行非常相似,您的循环实际上是稍慢的循环之一。
why don't popular libraries, written by people much smarter, use it?
他们专注于良好的算法、可读性、可用性、跨浏览器支持(当然还有正确性),而不是微优化。
关于javascript - 不同javascript for循环的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22962960/