2013-02-26 3 views
2

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

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

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

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

+0

возможно связанный: [была ли построена функция 'Function'?] (Http://stackoverflow.com/q/12881552/1048572) – Bergi

ответ

1

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

пуля номер 11 о выражении новой функции (...) указывает ...

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

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

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

0

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

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