2013-01-22 37 views
4

http://jsperf.com/jquery-each-vs-for-loop/108任何人都可以解釋這兩個循環之間的區別嗎?

for (var b = a[0], len = a.length; len; b = a[--len]) { 
    newArray.push(
    b 
); 
} 

for (var i = 0, len = a.length; i < len; i++) { 
    newArray.push(
    a[i] 
); 
} 
  1. 據jsref,它說,第一個是速度更快。爲什麼?
  2. 任何人都可以解釋我的循環什麼是它做的比較傳統的方式?
+0

@Arpit:你有沒有檢查文章。 – Kevin

+0

@凱文有趣,我從來沒有見過第一個模型。也希望在這裏學習。 –

+0

好的,讓我檢查一下。我正在考慮只有該頁面代碼.. :) – Arpit

回答

3

你的第一個例子只是做了很大的不同。檢查出來:

var a = [1,2,3,4], 
    newArray = []; 
for (var b = a[0], len = a.length; len; b = a[--len]) { 
    newArray.push(b); 
} 

> newArray 
[1, 4, 3, 2] 

你的第二個例子結果在預期的[1, 2, 3, 4]

/* first example */ 
var b = a[0], 
    len = a.length; 
while (len) { 
    newArray.push(b); 
    len = len-1; 
    b = a[len]; 
} 

/* second example */ 
var i = 0, 
    len = a.length; 
while (i < len) { 
    newArray.push(a[i]); 
    i = i+1; 
} 
+0

如果我沒有錯誤反向循環是更快哦? – Arpit

+0

可能會更快,因爲長度被緩存,而不是因爲它是相反的。但是,這是一個不同的循環。 – bfavaretto

+0

你的意思是如果長度已知,那麼即使它向前運行,循環也會更快。 ? – Arpit

0

我認爲大收穫:


如果您需要了解的算法,它可以轉換for -notation時,while循環和擴大減量和增量運營商更容易第一個循環的a被緩存在len中,然後用作單個布爾值:通過簡化循環條件可以獲得一點時間。然而!它不會產生與輸出相同的數組。

假定有十個元素:[0,1,2,3,4,5,6,7,8,9] - 環將處理一個[0],然後再一個[ - len],這在我們的例子中是一個[9]。你的最終結果將是newArray = [0,9,8,7,6,5,4,3,2,1]。

所以沒關係,爲什麼它的速度更快,因爲它做了錯誤的事情。

相關問題