2013-01-22 34 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]。

所以没关系,为什么它的速度更快,因为它做了错误的事情。

相关问题