2016-02-13 3 views
5

私はこのような何か:Javascriptの操作の実行順序は常に同じであることが保証されていますか?

var x = 5; 
console.log(  x + (x += 10) ); //(B) LOGS 10, X == 20 
console.log( (x += 10) + x  ); //(A) LOGS 0, X == 30 

(A)と(B)との間に返された値の差は、それが評価されてしまう時にxの値によって説明されます。私はこのような舞台裏何かが起こる必要があることを把握:

 TIME ----> 
(A)   (x = 5) + (x += 10 = 15) = 20 
(B) (x += 10 == 15) + (x == 15)  = 30 

しかし、これはxは、それが書かれたのと同じ左から右順に評価された場合にのみ当てはまります。

だから、私はこのことについていくつかの質問を持って、

は、すべてのJavascriptの実装のために真であるとを保証このですか?

これは標準でこのように定義されていますか?

または、これは何らかの種類のの定義されていない動作 Javascriptの世界では?

は最後に、同じ考えが呼び出しを機能するように適用することができ、

var x = 5; 
console.log(x += 5, x += 5, x += 5, x += 5); // LOGS 10, 15, 20, 25 

彼らはまた、順にを評価されるように見えるが、これは常に起こるべきことを強く保証はありますか?

+0

これは役立つのですか、特にオペレータの実行順序についてのみ質問していますか? http://stackoverflow.com/questions/14863430/does-javascript-have-undefined-behaviour –

+0

私は特に保証された/予測可能な実行命令について尋ねています。しかし、それは素敵なリソースだった、それらのことを知らなかった。ありがとう。 – almosnow

+1

私はこれが何らかの質問をクリアすると信じています。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – Hogan

答えて

1

これは、すべてのJavascript実装でtrueになることは保証されていますか?

はい。

これは標準でこのように定義されていますか?

はい、あなた自身で読むことができますhere

具体的には、runtime semantics: evaluation of the addition operator (+)は、左側の式が右側の式の前に評価されることを指定します。

evaluation of argument listsと同じです。

または、これはJavascriptの世界で未定義の動作ですか?

はい、there is undefined behaviourはJavaScriptですが、ここにはありません。

関連する問題