- Базовый синтаксис JavaScript
Синтаксис
Update: Более новый материал по этой теме находится по адресу http://es5.javascript.ru.
12 Инструкции
Синтаксис
Инструкция :
Блок
ИнструкцияПеременной
ПустаяИнструкция
ИнструкцияВыражение
ИнструкцияIf
ИнструкцияИтерации
ИнструкцияContinue
ИнструкцияBreak
ИнструкцияReturn
ИнструкцияWith
ИнструкцияСМеткой
ИнструкцияSwitch
ИнструкцияThrow
ИнструкцияTry
Семантика
Инструкция может быть частью ИнструкцииСМеткой, которая тоже может являться частью ИнструкцииСМеткой, и так далее. Определённые таким образом метки совместно называются в описаниях семантики отдельных инструкций "текущим набором меток". ИнструкцияСМеткой не имеет никакого семантического предназначения кроме добавления новой метки к набору меток. Набор меток ИнструкцииИтерации или ИнструкцииSwitch изначально содержит единственный элемент пусто. Набор меток любой другой инструкции изначально пуст.
12.1 Блок
Синтаксис
Блок :
{ СписокИнструкцийопц }
СписокИнструкций :
Инструкция
СписокИнструкций Инструкция
Семантика
Значение нетерминала Блок : {} вычисляется по следующей схеме:
1. Вернуть (normal, empty, empty).
Значение нетерминала Блок : { СписокИнструкций } вычисляется по следующей схеме:
1. Вычислить значение СпискаИнструкций.
2. Вернуть Результат(1).
Значение нетерминала СписокИнструкций : Инструкция вычисляется по следующей схеме:
1. Вычислить значение Инструкции.
2. Если было брошено исключение, вернуть (throw, V, empty), где V - исключение. (Далее выполнение продолжается, как будто исключения брошено не было.)
3. Вернуть Результат(1).
Значение нетерминала СписокИнструкций : СписокИнструкций Инструкция вычисляется по следующей схеме:
1. Вычислить значение СпискаИнструкций.
2. Если Результат(1) является неожиданным завершением, вернуть Результат(1).
3. Вычислить значение Инструкции.
4. Если было брошено исключение, вернуть (throw, V, empty), где V - исключение. (Далее выполнение продолжается, как будто исключения брошено не было.)
5. Если Результат(3). значение равно empty, приравнять V = Результат(1). значение, иначе приравнять V = Результат(3). значение.
6. Вернуть (Результат(3). тип, V, Результат(3). цель).
12.2 Выражение переменной
Синтаксис
ИнструкцияПеременной :
var СписокОбъявленияПеременных ;
СписокОбъявленияПеременных :
ОбъявлениеПеременной
СписокОбъявленияПеременных , ОбъявлениеПеременной
СписокОбъявленияПеременныхБезIn :
ОбъявлениеПеременнойБезIn
СписокОбъявленияПеременныхБезIn , ОбъявлениеПеременнойБезIn
ОбъявлениеПеременной :
Идентификатор Инициализаторопц
ОбъявлениеПеременнойБезIn :
Идентификатор ИнициализаторБезInопц
Инициализатор :
= ВыражениеПрисваивания
ИнициализаторБезIn :
= ВыражениеПрисваиванияБезIn
Описание
Если инструкция переменной встречается внутри ОбъявленияФункции, переменные объявляются внутри локальной области видимости для данной функции согласно описанию в разделе 10.1.3. В противном случае они объявляются в глобальной области видимости (т.е. создаются как поля глобального объекта согласно описанию в разделе 10.1.3) с использованием атрибутов свойств { DontDelete }. Переменные создаются, когда происходит вход в область выполнения. Блок не определяет новой области выполнения. Только Программа и ОбъявлениеФункции создают новую область видимости. Переменные инициализируются при создании значением undefined. Переменной, для которой определён Инициализатор, присваивается значение его ВыраженияПрисваивания в момент выполнения ИнструкцииПеременной, а не в момент создания переменной.
Семантика
Значение нетерминала ИнструкцияПеременной : varСписокОбъявленияПеременных ; вычисляется по следующей схеме:
1. Вычислить значение СпискаОбъявленияПеременных.
2. Вернуть (normal, empty, empty).
Значение нетерминала СписокОбъявленияПеременных:ОбъявлениеПеременной вычисляется по следующей схеме:
1. Вычислить значение ОбъявленияПеременной.
Значение нетерминала СписокОбъявленияПеременных :СписокОбъявленияПеременных , ОбъявлениеПеременной вычисляется по следующей схеме:
1. Вычислить значение СпискаОбъявленияПеременных.
2. Вычислить значение ОбъявленияПеременной.
Значение нетерминала ОбъявлениеПеременной : Идентификатор вычисляется по следующей схеме:
1. Вернуть строковое значение, содержащее ту же последовательность символов, что и Идентификатор.
Значение нетерминала ОбъявлениеПеременной : Идентификатор Инициализатор вычисляется по следующей схеме:
1. Вычислить значение Идентификатора согласно описанию в разделе 11.1.2.
2. Вычислить значение Инициализатора.
3. Вызвать ПолучитьЗначение(Результат(2)).
4. Вызвать ЗаписатьЗначение(Результат(1), Результат(3)).
5. Вернуть строковое значение, содержащее ту же последовательность символов, что и Идентификатор.
Значение нетерминала Инициализатор : = ВыражениеПрисваивания вычисляется по следующей схеме:
1. Вычислить значение ВыраженияПрисваивания.
2. Вернуть Результат(1).
Значения нетерминалов СписокОбъявленияПеременныхБезIn, ОбъявлениеПеременнойБезIn и ИнициализаторБезIn вычисляются по той же схеме, что и СписокОбъявленияПеременных, ОбъявлениеПеременной и Инициализатор за исключением того, что значение вложенных СпискаОбъявленияПеременныхБезIn, ОбъявленияПеременнойБезIn, ИнициализатораБезIn и ВыраженияПрисваиванияБезIn вычисляются соответственно вместо вложенных СпискаОбъявленияПеременных, ОбъявленияПеременной, Инициализатора и ВыраженияПрисваивания.
12.3 Пустая инструкция
Синтаксис
ПустаяИнструкция :
;
Семантика
Значение нетерминала ПустаяИнструкция : ; вычисляется по следующей схеме:
1. Вернуть (normal, empty, empty).
12.4 Инструкция-выражение
Синтаксис
ИнструкцияВыражение :
[предпросмотр ∉ {{, function}] Выражение ;
Заметим, что ИнструкцияВыражение не может начаться с открывающей фигурной скобки, т.к. тогда оно было бы неотличимо от Блока. Также ИнструкцияВыражение не может начинаться с ключевого слова function, т.к. тогда оно было бы неотличимо от ОбъявленияФункции.
Семантика
Значение нетерминала ИнструкцияВыражение : [предпросмотр ∉ {{, function}]Выражение; вычисляется по следующей схеме:
1. Вычислить значение Выражения.
2. Вызвать ПолучитьЗначение(Результата(1)).
3. Вернуть (normal, Результат(2), empty).
12.5 Инструкция if
Синтаксис
ИнструкцияIf :
if ( Выражение ) Инструкция else Инструкция
if ( Выражение ) Инструкция
Каждое ключевое слово else, для которого выбор соответствующего ему if неоднозначен, должно считаться относящимся к ближайшему if, для которого нет соответствующего ему else.
Семантика
Значение нетерминала ИнструкцияIf : if ( Выражение ) Инструкция elseИнструкция вычисляется по следующей схеме:
1. Вычислить значение Выражения.
2. Вызвать ПолучитьЗначение(Результата(1)).
3. Вызвать ToBoolean(Результат(2)).
4. Если Результат(3) равен false - переход на шаг 7.
5. Вычислить значение первой Инструкции.
6. Вернуть Результат(5).
7. Вычислить значение второй Инструкции.
8.Вернуть Результат(7).
Значение нетерминала ИнструкцияIf : if ( Выражение ) Инструкция вычисляется по следующей схеме:
1. Вычислить значение Выражения.
2. Вызвать ПолучитьЗначение(Результата(1)).
3. Вызвать ToBoolean(Результат(2)).
4. Если Результат(3) равен false - вернуть (normal, empty, empty).
5. Вычислить значение Инструкции.
6. Вернуть Результат(5).