Синтаксис
Program :
SourceElementsopt
SourceElements :
SourceElement
SourceElements SourceElement
SourceElement :
Семантика
Для вычисления Program : SourceElementsopt выполняются следующие шаги:
Код этой программы Program является кодом в строгом режиме, если Директивный пролог (14.1) для его SourceElements Элементы исходного кода содержит директиву "Use Strict", или если применимо какое-либо из условий, указанных в пункте 10.1.1. Если код этой программы Program является кодом в строгом режиме, то SourceElements в следующих шагах вычисляется как код в строгом режиме. В противном случае SourceElements в следующих шагах вычисляется как код не в строгом режиме.
Если SourceElements отсутствует, вернуть (normal, empty, empty).
Пусть progCxt будет новым контекстом исполнения для глобального кода, как описано в пункте 10.4.1.
Пусть result будет результатом вычисления SourceElements.
Выйти из контекста исполнения progCxt.
Вернуть result.
ПРИМЕЧАНИЕ Процесс инициирования вычисления программы Program, а также процесс обработки результата этого вычисления определяются не данной спецификацией, а реализацией ECMAScript.
Для вычисления SourceElements : SourceElements SourceElement выполняются следующие шаги:
Пусть headResult будет результатом вычисления SourceElements.
Если headResult – непредвиденное завершение, вернуть headResult.
Пусть tailResult будет результатом вычисления SourceElement.
Если tailResult.value равно empty, пусть V = headResult.value, в противном случае пусть V = tailResult.value.
Вернуть (tailResult.type, V, tailResult.target)
Для вычисления SourceElement : Statement выполняются следующие шаги:
Вернуть результат вычисления Statement.
Для вычисления SourceElement : FunctionDeclaration выполняются следующие шаги:
Вернуть (normal, empty, empty).
Директивный пролог является самой длинной последовательностью порождающих правил ExpressionStatement Инструкция-выражение, встречающихся в Program или в FunctionBody в качестве исходных порождающих правил SourceElement Элемент исходного кода, где каждая ExpressionStatement в последовательности полностью состоит из токена StringLiteral Строковый литерал с последующей точкой с запятой. Точка с запятой может быть указана явно, или может быть вставлена посредством автоматической подстановки точки с запятой. Директивный пролог может представлять собой пустую последовательность.
Директива "Use Strict" представляет собой инструкцию-выражение ExpressionStatement в Директивном прологе, строковый литерал которой – точная последовательность символов "use
strict"
или 'use
strict'
. Директива "Use Strict" не может содержать EscapeSequence Управляющая последовательность или LineContinuation Продолжение строки.
Директивный пролог может содержать более одной директивы "Use Strict", однако в этом случае реализация может сгенерировать предупреждение.
ПРИМЕЧАНИЕ Порождающие правила ExpressionStatement для Директивного пролога, как правило, вычисляются во время вычисления правила SourceElements, в которое они вложены. Реализации могут определять обусловленные реализацией значения для правил ExpressionStatement, не являющихся Директивой "Use Strict", которые встречаются в Директивном прологе. При наличии соответствующего механизма уведомлений реализация должна сгенерировать исключение, если в Директивном прологе ей встретится ExpressionStatement, которое не является директивой "Use Strict" или которое не имеет определяемого реализацией значения.