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 按照下面的过程执行 :

  1. 令 B 为解释执行 Block 的结果 .
  2. 如果 B.type 不是 throw,返回 B.
  3. 返回一参数 B 解释执行 Catch 的结果 .

 产生式 TryStatement : try Block Finally 按照下面的过程执行 :

  1. 令 B 为解释执行 Block 的结果 .
  2. 令 F 为解释执行 Finally 的结果 .
  3. 如果 F.type 是 normal,返回 B.
  4. 返回 F.

 产生式 TryStatement : try Block Catch Finally 按照下面的过程执行 :

  1. 令 B 为解释执行 Block 的结果 .
  2. 如果 B.type 是 throw,则令 C 为以参数 B 解释执行 Catch 的结果 .
  3. 否则 , B.type 不是 throw,令 C 为 B.
  4. 令 F 为解释执行 Finally 的结果 .
  5. 如果 F.type 是 normal,返回 C.
  6. 返回 F.

 产生式 Catch : catch ( Identifier ) Block 按照下面的过程执行 :

  1. 令 C 为传给这个产生式的参数 .
  2. 令 oldEnv 为运行中执行环境的 LexicalEnvironment.
  3. 令 catchEnv 为以 oldEnv 为参数调用 NewDeclarativeEnvironment 的结果
  4. 以 Identifier 字符串值为参数调用 catchEnv 的 CreateMutableBinding 具体方法。
  5. 以 Identifier, C, false 为参数调用 catchEnv 的 SetMutableBinding 具体方法。注:这种情况下最后一个参数无关紧要。
  6. 设定运行中执行环境的 LexicalEnvironment 为 catchEnv.
  7. 令 B 为解释执行 Block 的结果 .
  8. 设定运行中执行环境的 LexicalEnvironment 为 oldEnv.
  9. 返回 B.

 不管控制是怎样退出 Block 的,LexicalEnvironment 总是会恢复到其之前的状态。

 产生式 Finally : finally Block 按照下面的过程执行 :

  1. 返回解释执行 Block 的结果 .

严格模式的限制

 如果一个有 Catch 的 TryStatement 出现在 严格模式代码 里,并且 Catch 产生式的 Identifier 是 "eval" 或 "arguments",那么这是个 SyntaxError


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号