try 语句
2018-06-16 15:24 更新
语法:
TryStatement : try Block Catch try Block Finally try Block Catch Finally
Catch : catch ( Identifier ) Block
Finally : finally Block
try 语句包裹一个可以出现特殊状况,如果运行时错误或 throw 语句的代码块。catch 子句提供了异常处理代码。如果 catch 子句捕获到一个异常,这个异常会绑定到它的 Identifier 上。
语义:
产生式 TryStatement : try Block Catch 按照下面的过程执行 :
- 令 B 为解释执行 Block 的结果 .
- 如果 B.type 不是 throw,返回 B.
- 返回一参数 B 解释执行 Catch 的结果 .
产生式 TryStatement : try Block Finally 按照下面的过程执行 :
- 令 B 为解释执行 Block 的结果 .
- 令 F 为解释执行 Finally 的结果 .
- 如果 F.type 是 normal,返回 B.
- 返回 F.
产生式 TryStatement : try Block Catch Finally 按照下面的过程执行 :
- 令 B 为解释执行 Block 的结果 .
- 如果 B.type 是 throw,则令 C 为以参数 B 解释执行 Catch 的结果 .
- 否则 , B.type 不是 throw,令 C 为 B.
- 令 F 为解释执行 Finally 的结果 .
- 如果 F.type 是 normal,返回 C.
- 返回 F.
产生式 Catch : catch ( Identifier ) Block 按照下面的过程执行 :
- 令 C 为传给这个产生式的参数 .
- 令 oldEnv 为运行中执行环境的 LexicalEnvironment.
- 令 catchEnv 为以 oldEnv 为参数调用 NewDeclarativeEnvironment 的结果
- 以 Identifier 字符串值为参数调用 catchEnv 的 CreateMutableBinding 具体方法。
- 以 Identifier, C, false 为参数调用 catchEnv 的 SetMutableBinding 具体方法。注:这种情况下最后一个参数无关紧要。
- 设定运行中执行环境的 LexicalEnvironment 为 catchEnv.
- 令 B 为解释执行 Block 的结果 .
- 设定运行中执行环境的 LexicalEnvironment 为 oldEnv.
- 返回 B.
不管控制是怎样退出 Block 的,LexicalEnvironment 总是会恢复到其之前的状态。
产生式 Finally : finally Block 按照下面的过程执行 :
- 返回解释执行 Block 的结果 .
严格模式的限制
如果一个有 Catch 的 TryStatement 出现在 严格模式代码 里,并且 Catch 产生式的 Identifier 是 "eval" 或 "arguments",那么这是个 SyntaxError
以上内容是否对您有帮助:
← throw 语句
更多建议: