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. 従来の方法と比較して、forループが何をしているのかを誰かに説明してもらえますか?
4

2 に答える 2

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]

2番目の例では、期待どおりの結果が得られ[1, 2, 3, 4]ます。


アルゴリズムを理解する必要がある場合は、for-notationを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;
}
于 2013-01-22T17:00:27.353 に答える
0

a最初のループの主な利点は、キャッシュされてから単一のブール値として使用されることだと思いますlen。ループ条件を単純化することで得られる時間は少しあります。でも!出力と同じ配列は生成されません。

:[0,1,2,3,4,5,6,7,8,9]に10個の要素があると仮定します-ループは最初にa [0]を処理し、次にa[--len]を処理します。この例ではa[9]です。最終結果はnewArray=[0、9、8、7、6、5、4、3、2、1]になります。

ですから、それが間違ったことをしているので、なぜそれが速いのかは問題ではありません。

于 2013-01-22T17:09:59.687 に答える