Warum warnt 10, wenn ich den folgenden JavaScript-Code ausführe? Ich würde erwarten, dass es 11 alarmiert. Ich habe dies in mehreren Browsern versucht.

var t=5;
t+=t++;
alert(t);
1
Eric 2 Sept. 2015 im 04:37

2 Antworten

Sie scheinen anzunehmen, dass bei left += right right zuerst ausgewertet und dann zu left hinzugefügt wird. Dies ist jedoch nicht der Fall.

Aus der spec:

12.14.4 Laufzeitsemantik: Auswertung

AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression

  1. Sei lref das Ergebnis der Auswertung von LeftHandSideExpression.
  2. Sei lval GetValue (lref).
  3. ...

Wie Sie sehen können, wird die linke Seite vor der rechten Seite ausgewertet, d. H. t wird vor t++ ausgewertet, und an diesem Punkt ist t immer noch 5.

1
Eric 1 Apr. 2017 im 20:15

Dies liegt daran, dass Sie t++ anstelle von ++t verwendet haben Der erste wertet die Zahl zuerst aus und erhöht sie dann, während der zweite das Gegenteil bewirkt.

t = 5; t += ++t // => 11
3
Sheerforce 2 Sept. 2015 im 01:40