Warum werden anonyme Funktionsausdrücke und benannte Funktionsausdrücke so unterschiedlich initialisiert?

Ich schaue aufAbschnitt 13 oder die ECMAScript-Spezifikation (v. 5). Ein anonymer Funktionsausdruck wird wie folgt initialisiert:

Gibt das Ergebnis der Erstellung eines neuen Function-Objekts gemäß 13.2 mit den von FormalParameterListopt angegebenen Parametern und dem von FunctionBody angegebenen Body zurück. Übergeben Sie die LexicalEnvironment des ausgeführten Ausführungskontexts als Scope. Übergeben Sie true als Strict-Flag, wenn der FunctionExpression-Code einen strengen Code enthält oder wenn der FunctionBody-Code einen strengen Code enthält.

Diese Logik istsehr ähnlich wie eine Funktionsdeklaration initialisiert wird. Beachten Sie jedoch, wie unterschiedlich die Initialisierung eines benannten Funktionsausdrucks ist.

Es sei funcEnv das Ergebnis des Aufrufs von NewDeclarativeEnvironment, wobei als Argument die Lexical Environment des ausgeführten Ausführungskontexts übergeben wirdLassen Sie envRec die Umgebungsaufzeichnung von funcEnv sein.Rufen Sie die konkrete CreateImmutableBinding-Methode von envRec auf, und übergeben Sie den String-Wert von Identifier als Argument.Der Abschluss sei das Ergebnis der Erstellung eines neuen Function-Objekts, wie in 13.2 angegeben, mit den von FormalParameterListopt angegebenen Parametern und dem von FunctionBody angegebenen Body. Geben Sie funcEnv als Scope ein. Übergeben Sie true als Strict-Flag, wenn der FunctionExpression-Code einen strengen Code enthält oder wenn der FunctionBody-Code einen strengen Code enthält.Rufen Sie die konkrete InitializeImmutableBinding-Methode von envRec auf, und übergeben Sie den String-Wert von Identifier und closure als Argumente.Rücksendeschluss.

Ich weiß, dass einer der großen Unterschiede zwischen benannten / anonymen Funktionsausdrücken darin besteht, dass benannte Funktionsausdrücke innerhalb der Funktion rekursiv aufgerufen werden können, aber das ist alles, woran ich denken kann. Warum ist das Setup so anders und warum müssen diese zusätzlichen Schritte ausgeführt werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage