2009-01-07 96 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 
} 
相關問題