Quando faccio qualcosa di simile:L'ordine di esecuzione delle operazioni in Javascript è sempre lo stesso?
var x = 5;
console.log( x + (x += 10) ); //(B) LOGS 10, X == 20
console.log( (x += 10) + x ); //(A) LOGS 0, X == 30
La differenza nel valore restituito tra (A) e (B) si spiega con il valore della x
nel momento in cui diventa valutato. Ho capito che qualcosa dietro le quinte come questo dovrebbe accadere:
TIME ---->
(A) (x = 5) + (x += 10 = 15) = 20
(B) (x += 10 == 15) + (x == 15) = 30
Ma questo è vero solo se e solo se x
viene valutata nello stesso da sinistra a destra ordine che è stato scritto.
Così, ho alcune domande su questo,
È questo garantita per essere vero per tutte le implementazioni JavaScript?
È definito in questo modo dallo standard?
Oppure, questo è un tipo di comportamento non definito nel mondo Javascript?
Infine, la stessa idea potrebbe essere applicato a chiamate di funzione,
var x = 5;
console.log(x += 5, x += 5, x += 5, x += 5); // LOGS 10, 15, 20, 25
Inoltre sembrano essere valutato al fine , ma c'è la garanzia più forte che questo dovrebbe sempre accadere?
Questo aiuto o la domanda specifica solo sull'ordine di esecuzione dell'operatore? http://stackoverflow.com/questions/14863430/does-javascript-have-undefined-behaviour –
Sto chiedendo in particolare l'ordine di esecuzione garantito/prevedibile. Ma quella era una bella risorsa, non sapevo di quelle cose. Grazie. – almosnow
Credo che questo dovrebbe chiarire qualsiasi domanda https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – Hogan