2

このJSPerfテストを考えると

なぜこれが速いのですか

var x;var i = 1E4;var j = 1E4;
for (; i-- > -1;) {
  x = -~x;
}
for (; j-- > -1;) {
  x = ~ - x;
}

これより ?

var x;var i = 1E4;var j = 1E4;
for (; j-- > -1;) {
  x = -1 * ~x;
}
for (; j-- > -1;) {
  x = ~ (-1 * x);
}

2 番目のバージョンの方が最適化可能ですか、それともその理由は何ですか?

4

2 に答える 2

1

2 番目のテストでは、 にリセットjするのを忘れているか、ループの 1 つで1E4an を使用するつもりだったと思います。iこのテストを参照してください。

http://jsperf.com/bit-increment/2

i最初のループと2 番目のループで使用するスニペットを追加したjところ、最初のテストと同じくらい速く実行されました。

于 2013-06-20T20:41:41.780 に答える
1

2 番目のコード サンプルでは、​​両方のループで反復子として j を使用します。

于 2013-06-20T20:42:51.233 に答える