Sie müssen in einer Javascript-Funktion verschachtelte Funktionen als Funktionsausdrücke definieren oder sind Funktionsdeklarationen in einem Funktionskörper erlaubt? Zum Beispiel, wäre so etwas konform?
%Vor%Oder müssten Sie so etwas tun?
%Vor%ECMA-262 sagt das:
Mehrere weit verbreitete Implementierungen von ECMAScript unterstützen bekanntermaßen die Verwendung von FunctionDeclaration als Anweisung. Es gibt jedoch signifikante und unüberbrückbare Variationen unter den Implementierungen in der Semantik, die auf solche Funktionsdeklarationen angewendet werden. Aufgrund dieser unversöhnlichen Unterschiede führt die Verwendung einer Funktionsdeklaration als Anweisung zu einem Code, der zwischen Implementierungen nicht zuverlässig portierbar ist. Es wird empfohlen, dass ECMAScript-Implementierungen diese Verwendung von FunctionDeclaration entweder verbieten oder eine Warnung ausgeben, wenn eine solche Verwendung auftritt. Zukünftige Ausgaben von ECMAScript können alternative tragbare Mittel zum Deklarieren von Funktionen in einem Anweisungskontext definieren.
Heißt das, dass eine Funktionsdeklaration in einem Funktionskörper technisch falsch ist, oder habe ich das komplett falsch verstanden? Ich habe gehört, dass Leute den Körper als einen Block bezeichnen, der laut dem Standard eine oder mehrere Aussagen ist, aber ich bin mir nicht sicher.
Funktionserklärungen sind im Funktionskörper sicherlich erlaubt, und es sind mir keine Fehler bekannt.
Nachdem Sie sich die ES5-Produktionsregeln angesehen haben, ist alles ziemlich klar.
%Vor%Mit anderen Worten, der Funktionskörper enthält Quellenelemente, und das Quellenelement ist entweder eine Anweisung oder eine Funktionsdeklaration. Daher kann FunctionDeclaration Teil eines Funktionskörpers sein.
Die Klausel, die Sie über "... Implementierungen von ECMAScript ..., von dem bekannt ist, dass er die Verwendung von FunctionDeclaration als Anweisung unterstützt", bezieht sich auf die Verwendung von FunctionDeclaration als Anweisung, aber nicht direkt im Funktionsbaustein. Es bezieht sich auf Fälle wie:
%Vor%Das ist ein nicht standardisiertes Verhalten. Weitere Informationen zu diesen Funktionsanweisungen finden Sie unter
Tags und Links javascript ecmascript-5