-1

重複の可能性:
console.log の間違った値
JavaScript で |= は何をしますか?

OK、私はこのコード例を見たときに、Google V8 エンジン用に JS を最適化する記事を読んでいました...

私はそれをすくい取りそうになりましたが、それからこれを見ました。|=; [0] |= b;

a = new Array();
a[0] = 0;
for (var b = 0; b < 10; b++) {
  console.log(a, b)
  a[0] |= b;  // Much better! 2x faster.
}

[0] |= b;

そのため、コンソールで、console.log をループに入れて実行したところ、15 になりました。

[15] 0
[15] 1
[15] 2
[15] 3
[15] 4
[15] 5
[15] 6
[15] 7
[15] 8
[15] 9

何?!?!反復ごとに、一体どこから 15 が得られるのでしょうか?!?!?!

私は 7 年間 Web 開発者として働いてきましたが、これは私と同僚を困惑させました。

誰かがこのコードを教えてくれますか?

乾杯。

4

3 に答える 3

2

[15]すべての繰り返しで表示される理由は、console.log()出力がバッファリングされ、渡されたオブジェクトまたは配列がすぐに評価されないためです。

ループは を計算0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9します。これは 15 です。

console.log()ループの呼び出しが完了する頃には、a.toString()すでに終了しているため、中間結果ではなく、最終結果の 15 が表示されます。

プリミティブ値はすぐに評価されるため、毎回a[0]ではなくログに記録した場合は、実際の結果が表示されます。a

a = new Array();
a[0] = 0;
for (var b = 0; b < 10; b++) {
  console.log(a[0], b)
  a[0] |= b;  // Much better! 2x faster.
}

0 0
0 1
1 2
3 3
3 4
7 5
7 6
7 7
7 8
15 9
于 2012-10-12T09:32:03.553 に答える
1

|ビット単位または 詳細はこちら

于 2012-10-12T09:27:55.120 に答える
0
  a[0] |= b; 

is equal to

  a[0] =  a[0]| b;  //bit wise operation
于 2012-10-12T09:26:59.490 に答える