Dlaczego anonimowe wyrażenia funkcji i nazwane wyrażenia funkcji są inicjowane tak inaczej?

Patrzę nasekcja 13 lub specyfikacja ECMAScript (w. 5). Anonimowe wyrażenie funkcji jest inicjowane w następujący sposób:

Zwraca wynik utworzenia nowego obiektu funkcji określonego w 13.2 za pomocą parametrów określonych przez FormalParameterListopt i treść określoną przez FunctionBody. Podaj w LexicalEnvironment działającego kontekstu wykonania jako Zakres. Podaj wartość true jako flagę Strict, jeśli wyrażenie FunctionExpression jest zawarte w ścisłym kodzie lub jeśli jego BodyBody jest ścisłym kodem.

ta logika jestbardzo podobny do sposobu inicjowania deklaracji funkcji. Zauważ jednak, jak różni się inicjalizacja nazwanego wyrażenia funciton.

Niech funcEnv będzie wynikiem wywołania NewDeclarativeEnvironment przekazującego środowisko leksykalne działającego kontekstu wykonania jako argumentNiech envRec będzie rekordem środowiska funcEnv.Wywołaj konkretną metodę envRec CreateImmutableBinding przekazującą wartość String identyfikatora jako argument.Niech zamknięcie będzie wynikiem utworzenia nowego obiektu funkcji określonego w 13.2 za pomocą parametrów określonych przez FormalParameterListopt i treści określonej przez FunctionBody. Podaj funcEnv jako zakres. Podaj wartość true jako flagę Strict, jeśli wyrażenie FunctionExpression jest zawarte w ścisłym kodzie lub jeśli jego BodyBody jest ścisłym kodem.Wywołaj konkretną metodę envRec InitializeImmutableBinding przekazującą wartość String identyfikatora i zamknięcie jako argumenty.Zamknięcie powrotu.

Wiem, że jedną z największych różnic między nazwanymi / anonimowymi wyrażeniami funkcji jest to, że nazwane wyrażenia funkcji mogą być wywoływane rekurencyjnie z poziomu funkcji, ale to wszystko, o czym mogę myśleć. Dlaczego konfiguracja jest tak inna i dlaczego trzeba wykonać dodatkowe kroki?

questionAnswers(2)

yourAnswerToTheQuestion