Почему выражения анонимных функций и выражения именованных функций инициализируются так по-разному?

я смотрю нараздел 13 или спецификация ECMAScript (v. 5). Выражение анонимной функции инициализируется следующим образом:

Вернуть результат создания нового объекта Function, как указано в 13.2, с параметрами, указанными в FormalParameterListopt, и телом, указанным в FunctionBody. Передайте в LexicalEnvironment контекст работающего выполнения как Scope. Передайте true как флаг Strict, если выражение FunctionExpression содержится в строгом коде или если его FunctionBody является строгим кодом.

эта логикаочень похоже на то, как инициализируется объявление функции. Однако обратите внимание, насколько отличается инициализация именованного выражения funciton.

Пусть funcEnv будет результатом вызова NewDeclarativeEnvironment, передающего контекст выполнениялексическая среда как аргументПусть envRec будет funcEnv ’запись среды.Вызвать конкретный метод CreateImmutableBinding для envRec, передав в качестве аргумента значение String идентификатора.Пусть closure будет результатом создания нового объекта Function, как указано в 13.2, с параметрами, указанными в FormalParameterListopt, и телом, определенным в FunctionBody. Перейдите в funcEnv как Scope. Передайте true как флаг Strict, если выражение FunctionExpression содержится в строгом коде или если его FunctionBody является строгим кодом.Вызвать конкретный метод InitializeImmutableBinding для envRec, передав в качестве аргументов значение String идентификатора и замыкание.Вернуться закрытие.

Я знаю одно из больших различий между выражениями именованных / анонимных функций в том, что выражения именованных функций можно вызывать рекурсивно изнутри функции, но это 'Это все, что я могу придумать. Почему настройки такие разные и зачем нужно делать эти дополнительные шаги?

Ответы на вопрос(2)

Ваш ответ на вопрос