Man kann zwei Variablen gleichzeitig mit demselben Wert initialisieren, irgendwie.
var foo, bar;
foo = bar = 10;
Aber es gibt keinen ähnlich einfachen Mechanismus, um beispielsweise 5 zu foo und bar gleichzeitig zu addieren. Natürlich ist es einfach genug, einfach zu tun:
foo += 5; // foo is now 15
bar += 5; // bar is now 15
Aber das sind zwei Operationen.
Der Trick ist:
foo += -bar + (bar += 5);
// foo and bar are now 15
Das werden Sie wahrscheinlich nie brauchen, es ist nur interessant zu wissen, dass es möglich ist.
Vielen Dank an Matheus Avellar, der diesen kleinen, verwirrenden Trick eingesendet hat und auch erklärt:
Das
-barwird geparst und wird zum negativen Wert vonbar, also -10. Dann wirda += 5ausgeführt und setztbarauf 15 (10 + 5). Schließlich werden beide Werte (-10 + 15) summiert und Sie erhalten die Differenz zwischen dem alten und dem neuenbar, nämlich 15.
Oder so :)
„foo = bar += 5“ würde nur ‚foo‘ gleich ‚bar + 5‘ setzen.
@William, das will Chris. Er möchte beide Variablen mit 10 initialisieren.
Dann jeweils 5 dazu addieren.
Jede mathematische Operation gibt ihren neuen Wert zurück.
@Kevin, im Beispiel hat er beide auf 10 gesetzt, aber bei der Übung geht es darum, was passiert, wenn Sie 2 verschiedene Variablen haben und möchten, dass beide um 5 steigen.
Es sind solche Dinge, die Douglas Crokfords Idee unterstützen, JavaScript vollständig erweiterbar zu machen: „Mit der gleichen Leichtigkeit, mit der wir neue Variablen definieren können, könnten wir den Programmierer neue Operatoren und neue Anweisungen hinzufügen lassen.“ http://javascript.crockford.com/tdop/tdop.html
Ja, das funktioniert gut, danke für den Tipp. Ich verstehe nicht, was William meint, wenn er sagt, dass es nicht funktioniert.
Wenn ich so etwas im Code sehen würde, würde ich wahrscheinlich die nächsten zwei Stunden damit verbringen zu versuchen zu verstehen, **warum**.
Code wie dieser wird nur zur Bildung, nicht für die Produktion geschrieben.
Sie sprechen von
foo += 5; bar += 5;Jedoch ist
foo += -bar + (bar += 5);in dieser Hinsicht schlimmer, da das VIER Operationen sind. Man könnte es auf drei reduzieren mitfoo -= bar - (bar += 5), mit dem zusätzlichen Vorteil, dass Ihr Code noch unleserlicher wird.