Все объявления функций и выражения создаются вызываемой новой функцией () за кулисами?

Я читаю часть скрипта ECMA 262 v5, в которой говорится об определениях функций. Как для объявлений функций, так и для выражений функций упоминается следующее:

Возврат результата создания нового объекта Function, как указано в 13.2.

Первым шагом в том, что упомянуто в разделе 13.2, является "создание нового собственного объекта ECMAScript...", а затем "Установите внутреннее свойство [[Class]] для F в значение" Функция ".

Из-за формулировки "создание нового объекта Funciton" мне было интересно, были ли закулисные объявления / выражения функций созданы путем вызова новой функции (....)?

2 ответа

раздел 15.3.2.1 спецификации скрипта ECMA говорит о новом выражении Function(...), а само новое выражение Function(...) ссылается на ту же логику, что и указанная в разделе 13.2.

Пуля № 11 о новом выражении Function(...) указывает...

Вернуть новый объект Function, созданный, как указано в 13.2, передавая P в качестве FormalParameterListopt и body в качестве FunctionBody. Передайте в Global Environment как параметр Scope и строгое как флаг Strict.

Раздел 13.2 является единственным источником логики создания функции, будь то создание выражения функции, объявление функции или вызов конструктора функции.

Так что ответить на вопрос нет. Создание объявления / выражения функции не вызывает новую функцию (...).

Из-за формулировки "создание нового объекта Funciton" мне было интересно, были ли закулисные объявления / выражения функций созданы путем вызова новой функции (....)?

Нет. Он делает именно то, что говорит, создавая новый объект и делая его функцией. Что бы вы ожидали за кулисами? new Function еще? Вместо, new Function действительно вызывает эту функцию в 13.2.

Другие вопросы по тегам