In another question, hatte jemand eine falsche Klassendefinition, den Code enthielt wie:Warum ist funkname() = wert; gültige Syntax?
var myClass = function() {
...
this.name() = function() { ... };
}
Der offensichtliche Fehler ist, dass das Verfahren sollte ohne die Klammern nach name
mit this.name = ...
, definiert werden. Wenn Sie den Konstruktor aufrufen, erhalten Sie einen Fehler, da this.name
nicht definiert ist. Ich habe ein einfacheres Beispiel in der Konsole:
foo() = 3; // Causes: ReferenceError: foo is not defined
function foo() {};
foo() = 3; // Causes: ReferenceError: Invalid left-hand side in assignment
Gibt es einen Kontext, in dem eine Funktion etwas zurückgeben konnte, die zugeordnet werden kann? Ich glaube nicht, dass Javascript Referenzen wie C++ oder PHP hat, denen man zuordnen kann. Warum führt dies nicht zu einem Syntaxfehler und nicht zu unterschiedlichen Fehlern, je nachdem, ob die Funktion definiert ist oder nicht?
Wie die Grammatik definiert ist, ist kein Syntaxfehler. Ich kenne keine Möglichkeit, die Syntax zu verwenden, um etwas semantisch Gültiges zu konstruieren. –
Meine Verwirrung über diese Frage stammt aus dem Titel: "Warum ist funkname() = value; gültige Syntax?" Es gibt keine Situation, wo das eine gültige Syntax ist. Es wird * immer * ein Fehler ausgelöst. – ncksllvn
Außerdem ersetzt "ReferenceError" natürlich 'SyntaxError' - im Beispielcode versucht der Interpreter als Erstes, eine undefinierte Funktion auszuführen. – ncksllvn