Ich versuche, diese Magie in js zu lösen:Js Magie braucht Erklärung
var a = 1;
console.log(a++ + ++a);
Es gibt 4 zurück, und ich kann verstehen, dass es 1 + 3, aber was ist die Folge davon?
Ich versuche, diese Magie in js zu lösen:Js Magie braucht Erklärung
var a = 1;
console.log(a++ + ++a);
Es gibt 4 zurück, und ich kann verstehen, dass es 1 + 3, aber was ist die Folge davon?
a++
Mittel den Wert zurück, bevor Erhöhen
++a
bedeutet kehrt der Wert nach
So um Ihr Beispiel zu brechen:
var a = 1;
console.log(a++ + ++a);
a
wird auf 1
a++
gibt 1 zurück, und dann a
wird erhöht, um 2
(aber wir tun nichts mit ihm an dieser Stelle)++a
Schritten a
und gibt 3console.log(1 + 3)
mit der 1
kommt aus Schritt 1 und der 3
kommt aus Schritt 3.Um etwas genauer auf das, was Xufox was saying in the comments section gehen in:
++a
ersten Schritten der Wert ein und gibt dann ein L-Wert auf einen Bezug genommen wird, so dass, wenn der Wert von a dann verwendet wird, wird es der erhöhte Wert sein .
a++
gibt zuerst einen rvalue zurück, dessen Wert a ist, dh der alte Wert, und erhöht dann a zu einer unbestimmten Zeit vor dem nächsten vollständigen Ausdruck (d. H. "Vor dem Semikolon").
Das Postfix-Inkrement hat eine höhere Priorität als das Präfix-Inkrement.
Das half mir viel zurück in den Tag, und es sollte auch Ihnen helfen ..
ist:, was die Sequenz dieses
In Pseudo-spec Sprache
a++ + ++a
)
lval
das Ergebnis des linken Operanden Auswertung (a++
)
a
und weisen Sie ihn oldValue
zu. (1
)newValue
oldValue + 1
sein.newValue
zu a
.(a == 2
)oldValue
. (1
)rval
das Ergebnis des rechten Operanden Auswertung (++a
)
a
bekommen und es zu oldValue
zuweisen. (2
)newValue
oldValue + 1
sein.newValue
zu a
. (a == 3
)newValue
. (3
)lval + rval
. (1 + 3
)4
wenn Sie verstehen, was Nachinkrement und Prä-Inkrement Betreiber tun, wird es ziemlich offensichtlich. Sie müssen nur die Dokumente lesen und wissen, dass Code von links nach rechts ausgeführt wird. – Xufox
Ich mache es noch nicht offensichtlich. Kannst du es einfach beschreiben wie 1) ... 2) ... 3) ... in deiner Antwort? –
@Jonasw Was hat '2 + 2' damit zu tun? – Xufox