codecamp

try 语句

语法:

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


throw 语句
debugger 语句
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }