2009-01-07 59 views

回答

15
+0

哇,真酷! – 2009-01-07 19:51:12

+0

@Plan B:是的,看这篇文章也是:http://www.moddular.org/log/javascript-loops/ – CMS 2009-01-07 19:52:52

+2

希望这会鼓励你去任何最明显的 - 不是最快的。他们都很快。 – 2009-01-07 19:53:27

3

好的老式for环路有什么问题?

for(var i = 0; i < list.length; i++) { 
    // do something with list[i] 
} 

for...infor...each...in语义往往迷惑人,并导致意想不到的结果。

+6

在Javascript中,可变分辨率是迟到的。在上面的例子中,你需要在循环的每一次迭代中解析长度。你应该通过为(var i = 0,l = list.length; i 2009-01-07 20:13:43

0

CMS的链接应该会显示你的小数据集,它们都很快,我建议的唯一的事情是,你避免for (a in b),因为它比其他循环构造有更高的内存开销,并且可能会慢得多由于其“有趣”的语义。

Anyhoo,除了for(in)任何真正的JS应该花更多的时间在实际工作中,而不是花在处理循环本身上,因此循环的成本的微小变化不应该太重要。

0

这最近在Greg Reimer's Weblog中被覆盖。

简单的回答是这样的:

for (var i=0, node; node = hColl[i++];) { 
    // do something with node 
} 
0

其他地方一样回答(为什么这个线程存在吗?):反向而:

var i = foo.length; while (i--) { /* do something with foo[i] */ } 

..是最快的循环,如果你能处理与警告的是:

  • 相反的顺序并不总是合适的

  • 这是一个有点难以阅读

  • 它增加了一个变量的任何范围内它的足迹

  • 它仅仅是稍微比小footprinted和更具可读性缓存长度for循环更快

0

据说对象是快...例如:

var array = {"0": "foo", "1": "bar"} 
for(var i in array){ 
    var val = array[i]; 
    // do something 
} 
相关问题