Program
:
**opt
SourceElements
:
**
SourceElement
:
Statement
FunctionDeclaration
产生式 ** : opt 依照下面的步骤来解释执行:
- 若 ** 的指令序言(参考 14.1 章)中,包含严格模式指令, 或者满足 10.1.1 章节所描述的任何一个条件,则 ** 的代码就是一段严格模式代码,并对应性的,以严格模式或非严格模式,依照下面列出的步骤来解释执行代码。
- 若没有 ** 部分 , 则返回 (normal, empty, empty)。
- 令 progCxt 为一个新的,如 10.4.1 章节所描述的,应用于全局代码的执行环境。
- 令 result 为解释执行 ** 的结果。
- 退出 progCxt 这个执行环境。
- 返回 result。
产生式 ** : ** ** 依照下面的步骤来解释执行 :
- 令 headResult 为解释执行 ** 的结果。
- 若 headResult 是非常规性完结的,返回 headResult。
- 令 tailResult 为解释执行 ** 的结果。
- 若 tailResult.value 为 empty,令 V = headResult.value,其他情况,令 V = tailResult.value。
- 返回 (tailResult.type, V, tailResult.target)。
产生式 : ** : Statement 依照下面的步骤来解释执行:
- 返回解释执行 Statement 的结果。
产生式 : ** : FunctionDeclaration 依照下面的步骤来解释执行:
- 返回 (normal, empty, empty)。
一个指令序言,是那些从 ** 或 FunctionBody 的首个 ** 开始,到那些完全由一个字符串字面量后面跟一个分号,所构成的最长的 ExpressionStatement 序列。ExpressionStatement 序列中的每一个都是 StringLiteral 后面接分号,可以显式的插入,或者借助分号自动插入机制来插入。一个指令序言也可以是一个空的序列。
严格模式指令是一个 "use strict" 或 'use strict' 的 StringLiteral。一个严格模式指令不应该包含 EscapeSequence 或 LineContinuation。
一个指令序言,可以不仅仅包含一个严格模式指令。然而,当这种情况出现的时候,ECMAScript 实现可以发出一个相关警告。