谁能解释一下这两个循环之间的区别

Can anyone explain me the difference between these two loopings?

本文关键字:循环 两个 区别 之间 能解释 一下      更新时间:2023-09-26

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. 谁能解释一下与传统方式相比它的 for 循环是什么?

你的第一个例子只是做了一些非常不同的事情。看看吧:

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]


如果您需要了解算法,将for表示法转换为 while-循环并扩展递减和递增运算符时可能会更容易:

/* 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;
}

我认为第一个循环的主要收益是a被缓存在len中,然后用作单个布尔值:通过简化循环条件可以获得一点时间。然而!它不会生成与输出相同的数组。

假设你在 a 中有十个元素:[0,1,2,3,4,5,6,7,8,9] - 循环将首先处理 a[0],然后处理 a[--len],在我们的示例中是 a[9]。您的最终结果将是 newArray = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]。

所以为什么它更快并不重要,因为它在做错误的事情。