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 語句包裹一個可以出現(xiàn)特殊狀況,如果運(yùn)行時錯誤或 throw 語句的代碼塊。catch 子句提供了異常處理代碼。如果 catch 子句捕獲到一個異常,這個異常會綁定到它的 Identifier 上。

 語義:

 產(chǎn)生式 TryStatement : try Block Catch 按照下面的過程執(zhí)行 :

  1. 令 B 為解釋執(zhí)行 Block 的結(jié)果 .
  2. 如果 B.type 不是 throw,返回 B.
  3. 返回一參數(shù) B 解釋執(zhí)行 Catch 的結(jié)果 .

 產(chǎn)生式 TryStatement : try Block Finally 按照下面的過程執(zhí)行 :

  1. 令 B 為解釋執(zhí)行 Block 的結(jié)果 .
  2. 令 F 為解釋執(zhí)行 Finally 的結(jié)果 .
  3. 如果 F.type 是 normal,返回 B.
  4. 返回 F.

 產(chǎn)生式 TryStatement : try Block Catch Finally 按照下面的過程執(zhí)行 :

  1. 令 B 為解釋執(zhí)行 Block 的結(jié)果 .
  2. 如果 B.type 是 throw,則令 C 為以參數(shù) B 解釋執(zhí)行 Catch 的結(jié)果 .
  3. 否則 , B.type 不是 throw,令 C 為 B.
  4. 令 F 為解釋執(zhí)行 Finally 的結(jié)果 .
  5. 如果 F.type 是 normal,返回 C.
  6. 返回 F.

 產(chǎn)生式 Catch : catch ( Identifier ) Block 按照下面的過程執(zhí)行 :

  1. 令 C 為傳給這個產(chǎn)生式的參數(shù) .
  2. 令 oldEnv 為運(yùn)行中執(zhí)行環(huán)境的 LexicalEnvironment.
  3. 令 catchEnv 為以 oldEnv 為參數(shù)調(diào)用 NewDeclarativeEnvironment 的結(jié)果
  4. 以 Identifier 字符串值為參數(shù)調(diào)用 catchEnv 的 CreateMutableBinding 具體方法。
  5. 以 Identifier, C, false 為參數(shù)調(diào)用 catchEnv 的 SetMutableBinding 具體方法。注:這種情況下最后一個參數(shù)無關(guān)緊要。
  6. 設(shè)定運(yùn)行中執(zhí)行環(huán)境的 LexicalEnvironment 為 catchEnv.
  7. 令 B 為解釋執(zhí)行 Block 的結(jié)果 .
  8. 設(shè)定運(yùn)行中執(zhí)行環(huán)境的 LexicalEnvironment 為 oldEnv.
  9. 返回 B.

 不管控制是怎樣退出 Block 的,LexicalEnvironment 總是會恢復(fù)到其之前的狀態(tài)。

 產(chǎn)生式 Finally : finally Block 按照下面的過程執(zhí)行 :

  1. 返回解釋執(zhí)行 Block 的結(jié)果 .

嚴(yán)格模式的限制

 如果一個有 Catch 的 TryStatement 出現(xiàn)在 嚴(yán)格模式代碼 里,并且 Catch 產(chǎn)生式的 Identifier 是 "eval" 或 "arguments",那么這是個 SyntaxError


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號