In Anbetracht der Antwort Antwort unten bezüglich der Referenz ECMAScript-Sprachspezifikation - 11.13.2 Zusammengesetzte Zuweisung
Unter Berücksichtigung, warum diese,
%Vor% sind NICHT gleich. Es gibt zeitliche semantische Probleme mit der Bewertung von links nach rechts (ref: ECMA spec. - Der Zusatzoperator ). Eine Konsequenz ist, dass der Operator +
nicht notwendigerweise kommutativ ist.
Dies kann auch mit gesehen werden mit:
%Vor%oder
%Vor%Das faule Auswertungs-Paradigma, das von mir irrtümlich und unangemessen verwendet wird und dadurch das Problem verursacht, ist ebenfalls ein schlechtes Attribut meines persönlichen Modus Operandi.
Die folgenden Überlegungen wurden möglicherweise bereits angesprochen, obwohl dies nicht der Fall zu sein scheint. Wenn ja, könnten Links zu den Diskussionen bereitgestellt werden?
Die formale Denotations-Semantik der Gecko-Javascript-Laufzeit-Engine ist ein Rätsel. Empirische Tests sind anstrengend und können nicht erschöpfend sein.
Die Referenz ECMAScript-Sprachspezifikation , scheint ungenügend zu sein, obwohl für die Erstellung solcher Skripte, wie
, Glaubwürdigkeit vorgesehen ist %Vor%mit der konsequenten Bedeutung solcher Konstrukte beim Binden von Werten.
Dies würde die Konzepte von call durch (oder eher durch) von Bedarf, Wert, Referenz, Inferenz, Name, ... als relevant klarstellen oder nicht. Das, Javascript ist ein Prototyping-Interpreter, gibt einigen der folgenden Probleme implizite Bedeutung.
Was ist das erwartete Ergebnis von:
%Vor%? Ist es einfach, die Ergebnisse (richtig!) Vorherzusagen?
Die Frage ist ein wenig rhetorisch, da sie speziell mit eval
s konstruiert wurde, um die subtilen Nuancen der Interpretation zu erzwingen und zu betonen. Kann die Bewertung dieses Skripts (und der nachfolgenden Seite) mit der ECMAScript-Sprachspezifikation
(Nebenbei, überlegen Sie sich:
%Vor%zeigt Folgendes an:
%Vor% wobei die Teilauswertungen von ra
NICHT zu o.n
s analog sind!
und das Folgende ist weniger exotisch als die Verwendung von o.n:
%Vor%zeigt Folgendes an:
%Vor%)
Unter Berücksichtigung des folgenden Skripts:
%Vor%Die Gecko-Engine gibt aus:
%Vor%JavaScript hat ein eifriges Auswertungsmodell (call by value), das im ECMA-Standard klar definiert ist. All diese Fragen können durch sorgfältiges Lesen des Standards gelöst werden. Zum Beispiel ist der Grund, warum das Ergebnis 11 oben und nicht 12 ist, in 11.13.2 des Standards klar dargelegt. o.n wird vor dem Aufruf von f () und nicht wie in Schritt 2 angegeben ausgewertet.
Tags und Links javascript javascript-engine formal-semantics denotational-semantics