4

ECMAScript 言語仕様は、乗算演算子が交換可能 (A*B==B*A) であると指定されています。ただし、A または B に代入演算子が含まれている場合、これは当てはまりません。たとえば、ブラウザのコンソールに次のように入力すると:

 var x = 1;
 (x + 2) * ((x = 4) + 1);

ただし、15が得られます。

 var x = 1;
 ((x = 4) + 1) * (x + 2)

30を与えます。

それとも可換とは、すべての変数がその値に解決されると可換になることを意味しますか? ただし、仕様では、数学的な乗算操作ではなく、「* 演算子」について説明しています。

4

1 に答える 1

3

問題は x+2 です。2 番目の例では 3 ではなく 6 です。既に x=4 を割り当てているためです。

後の意味:

((x = 4) + 1)

何が起こるかは

(x + 2) == (4 + 2) == 6

(4+1) * 6 = 30

これは正常な動作です

于 2014-11-05T12:45:04.673 に答える