Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
51 госы.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
75.21 Кб
Скачать

13 Определение функции

Синтаксис

ОбъявлениеФункции :

function Идентификатор ( СписокФормальныхАргументовопц ){ТелоФункции }

ВыражениеФункции :

function Идентификаторопц ( СписокФормальныхАргументовопц ){ТелоФункции }

СписокФормальныхАргументов :

Идентификатор  СписокФормальныхАргументов , Идентификатор

ТелоФункции :

ЭлементыИсходногоКода

Семантика

Нетерминал ОбъявлениеФункции : function Идентификатор (СписокФормальныхАргументовопц ){ ТелоФункции } обрабатывается для получения объявления функции следующим образом:

1. Создать новый объект Function согласно разделу 13.2, используя аргументы изСпискаФормальныхАргументовопц и тело из ТелаФункции. Передать иерархию областей видимости текущего контекста исполнения как ОбластьВидимости.

2. Создать свойство текущего объекта переменных (согласно определению в разделе 10.1.3) с именем Идентификатор и значением Результат(1).

Значение нетерминала ВыражениеФункции : function (СписокФормальныхАргументовопц ){ ТелоФункции } вычисляется по следующей схеме:

1. Создать новый объект Function согласно разделу 13.2, используя аргументы изСпискаФормальныхАргументовопц и тело из ТелаФункции. Передать иерархию областей видимости текущего контекста исполнения как ОбластьВидимости.

2. Вернуть Результат(1).

Значение нетерминала ВыражениеФункции : function Идентификатор (СписокФормальныхАргументовопц ){ ТелоФункции } вычисляется по следующей схеме

1. Создать новый объект, как он был бы создан выражением new Object().

2. Добавить Результат(1) к началу иерархии областей видимости.

3. Создать новый объект Function согласно разделу 13.2, используя аргументы изСпискаФормальныхАргументовопц и тело из ТелаФункции. Передать иерархию областей видимости текущего контекста исполнения как ОбластьВидимости.

4. Создать свойство в объекте Результат(1). Имя свойства Идентификатор, значение равно Результат(3), атрибуты - { DontDelete, ReadOnly }.

5. Убрать Результат(1) из начала иерархии областей видимости.

6. Вернуть Результат(3).

ЗАМЕЧАНИЕ ТелоФункции в ВыражениеФункции может ссылаться на Идентификатор, указанный в этом же ВыраженииФункции, чтобы функция могла рекурсивно вызывать себя. Однако в отличие от ОбъявленияФункции Идентификатор ВыраженияФункции не влияет на область видимости, в которой находилось ВыражениеФункции, и не может использоваться для ссылки на функцию из этой области видимости.

Значение нетерминала ТелоФункции : ЭлементыИсходногоКода вычисляется по следующей схеме:

1. Обработать объявления функций в ЭлементахИсходногоКода.

2. Вычислить значение ЭлементовИсходногоКода.

3. Вернуть Результат(2).

13.1 Определения

Для описания процесса создания объектов функций требуется пара определений:

13.1.1 Тождественные правила грамматики

Два применения грамматического правила для нетерминала ТелоФункциисчитаются тождественными в одном из следующих случаев:

  • Для обоих случаев ТелоФункции было взято из одного и того же места исходного кода одной и той же программы на ECMAScript. Этот исходный код состоит из глобального кода и содержащихся в нём кодов функций согласно определениям в разделе 10.1.2.

  • Для обоих случаев ТелоФункции было взято из одного и того же места исходного кода, переданного одному и тому же вызову eval (15.1.2.1). Этот исходный код состоит из eval-кода и содержащихся в нём кодов функций согласно определениям в разделе 10.1.2.

ЗАМЕЧАНИЕ Два случая использования ТелаФункции, полученных путём вызова конструктораFunction (см. разделы 15.3.1 и 15.3.2), никогда не считаются тождественными. Аналогично, два случая использования FunctionBody, полученных путём двух разных вызовов eval, никогда не считаются тождественными, даже если этим двум вызовам eval был передан одинаковый аргумент.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]