Ich benutze Netbeans, um jeder Funktion, die ich schreibe, professionelle Kommentare hinzuzufügen. Also beginne ich jedes mit /**
und drücke dann Enter
, damit Netbeans das Standardkommentarschema für die folgende Funktion erfüllt.
Bis jetzt habe ich dies nur für die PHP-Sprache verwendet und in diesem Fall hat Netbeans immer nur einen @returns {type}
Teil des Kommentarschemas hinzugefügt , wenn die folgende PHP-Funktion wirklich eine return
Anweisung enthielt . Bei sogenannten "Prozeduren" (Funktionen, die keinen Wert zurückgeben) fehlte dieser Teil.
Heute habe ich dasselbe für die Javascript-Funktion versucht und Netbeans hat einen @returns {undefined}
Teil zum Kommentarschema hinzugefügt , obwohl die folgende Funktion nichts zurückgibt.
Das hat mich verwirrt. Schlägt Netbeans auf diese Weise vor, dass jede Javascript-Funktion etwas zurückgeben muss? Was soll ich machen? Ignorieren (oder löschen) Sie diesen Kommentarschema-Teil oder folgen Sie dem Vorschlag (wenn dies überhaupt ein Vorschlag ist) und fügen Sie ihn return false;
am Ende einer solchen Funktion hinzu, obwohl er für mich nutzlos ist?
quelle
undefined
. In vielen Sprachen wird das Ergebnis der letzten Anweisung zurückgegeben (nützlicher, IMO). Diese werden implizite Rückgaben genannt .Antworten:
Die kurze Antwort lautet nein.
Die eigentliche Antwort lautet Ja: Die JS-Engine muss benachrichtigt werden, dass eine Funktion ihr Geschäft beendet hat. Dies geschieht, indem die Funktion etwas zurückgibt. Dies ist auch der Grund, warum eine Funktion anstelle von "fertig" als "zurückgekehrt" bezeichnet wird .
Eine Funktion, der eine explizite return-Anweisung fehlt, wird zurückgegeben
undefined
, wie eine C (++) -Funktion, die keinen Rückgabewert hat (und deren Signatur dies widerspiegelt), um Folgendes zurückzugebenvoid
:Wie in fast jeder Sprache können Sie auch in JS den Rückgabewert einer Funktion einfach ignorieren, was sehr viel getan wird:
Auf einem sehr niedrigen Niveau wird die Rückkehr in eine Art Sprung übersetzt. Wenn eine Funktion wirklich überhaupt nichts zurückgibt, gibt es keine Möglichkeit zu wissen, was und wann die nächste Funktion aufzurufen oder Ereignishandler und dergleichen aufzurufen.
Um es noch einmal zusammenzufassen: Nein, eine JS-Funktion muss in Bezug auf Ihren Code nichts zurückgeben. Aber was die JS-Engines betrifft: Eine Funktion gibt immer etwas zurück, sei es explizit über eine
return
Anweisung oder implizit. Wenn eine Funktion implizit zurückgibt, ist ihr Rückgabewert immer undefiniert.quelle
void
, es gibt nichts zurück, aber seine Signatur spiegelt dies durch denvoid
Rückgabetyp wider .return;
ist wahrscheinlich nur dann nützlich, wenn Sie frühzeitig zurückkehren müssen. Das Schreibenreturn undefined;
kann zu unterschiedlichen Ergebnissen führen, wenn esundefined
in einen anderen Wert aufgelöst wird. Die meisten (wenn nicht alle) Browser geben einen Fehler aus, wenn Sie versuchen, undefiniert neuvoid
in anderen Sprachen (wie C) darauf verwiesen , wo Sie Funktionen wie haben könnenvoid do_someting(int *arg)
, aber Sie können keine Variable mit dem Typ habenvoid
. In Cvoid
ist nicht wirklich eine Art, so dass diese Funktionen nicht zurückgeben nichts, sie springen nurNein, eine Rücksendung ist nicht erforderlich.
Aber keine Rückkehr gibt tatsächlich die zurück
undefined
quelle
Nein, das tun sie nicht. Es ist wahr, dass tief in der Spezifikation diese alle leicht unterschiedlich sind:
... aber das Ergebnis des Aufrufs jedes von ihnen ist das gleiche :
undefined
. Also pragmatisch ausgedrückt:return
, Sie können einfach die Codeausführung "vom Ende fallen" lassenundefined
, schreiben Sie einfachreturn;
return;
beendet oder mit beendet wurdereturn undefined;
. Sie sehen für Ihren Anrufcode alle gleich ausZu der Spezifikation: Insbesondere wenn die Ausführung einer Funktion am Ende abfällt, ist dies in der Spezifikation eine "normale" Vervollständigung. aber
return;
undreturn value;
sind beide "return" Vervollständigungen mit einem zugeordneten Wert (undefined
), der (ganz geringfügig) unterschiedlich ist. Der Unterschied wird jedoch durch die Semantik des Aufrufs einer Funktion beseitigt , die besagt:Es gibt also keinen Unterschied, den Sie im Code beobachten können.
quelle
Nein, Sie müssen nicht für jede Funktion etwas zurückgeben. Es ist optional und hängt davon ab, wie Sie Ihre Codelogik schreiben.
quelle