0

03 に達するまでインクリメントし、その後ゼロから開始する関数を作成しようとしています (つまり、3 回呼び出され1てから2.%

ここに私の2つの機能があります:

var i, j = 0, 0
function run () { 
  console.log(i); 
  i = i++ % 3;
 } // Called three times logs 0, 0, 0

function newRun () {
  console.log(j);
  j = ++j % 3;
} // Called three times it logs 0, 1, 2

前置演算子が機能し、後置演算子が機能しないのはなぜですか (つまり、最初の関数では、なぜiインクリメントされないのですか?

4

2 に答える 2

3

これはモジュロ演算子とは何の関係もありません。平

i = i++;

機能しません-値を取得し、それをインクリメントしてから、最初に取得した値で上書きします。ループ内の i++ と ++i の違いも参照してください。彼らがどのように機能するかについて。

あなたはおそらく書きたい

i = (i + 1) % 3;
于 2015-04-09T11:06:23.413 に答える
1

前置演算子と後置演算子を使用する場合、実際に実行されるコードを書き留めておくとよい場合がよくあります。

i ++

意味:

tmp1 = i
i = i + 1

(tmp1は操作全体の結果です)。その間

++ i

意味

i = i + 1
tmp1 = i

つまり

i = i ++ % 3

実際には

tmp1 = i
i = i + 1
i = tmp1 % 3

ご覧のとおり、最後の行が上書きするため、2 行目はまったく効果がありません。

于 2015-04-09T11:10:19.413 に答える