
- •60. Немецкая модель корпоративного управления.
- •62. Корпоративная культура. Определение функции. Практические методы внедрения корпоративной культуры.
- •13 Определение функции
- •13.1 Определения
- •13.1.1 Тождественные правила грамматики
- •13.1.2 Объединённые объекты
- •13.2 Создание объектов типа Function
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 был передан одинаковый аргумент.