大家都知道Java裏有try語句,可以方便的捕捉錯誤並方便程序員使用,在ECMA-262中也正式引用了這一特性,用來給廣大程序員在代碼層上一層“保險”。
用法如下:
try {
tryCode - 嘗試執行代碼塊
}
catch(e) {
catchCode - 捕獲錯誤的代碼塊
}
finally {
finallyCode - 無論 try / catch 結果如何都會執行的代碼塊
}
執行過程爲try-catch(try中捕捉到錯誤執行)-finally(結束必執行),其中catch與finally可選,catch中參數e爲JavaScript Error,程序員可以將其捕捉並繼續向下執行,而不是被錯誤打斷。
參數e具有以下屬性:
description: 錯誤描述 (僅IE可用).
fileName: 出錯的文件名 (僅Mozilla可用).
lineNumber: 出錯的行數 (僅Mozilla可用).
message: 錯誤信息 (在IE下同description)
name: 錯誤類型.
number: 錯誤代碼 (僅IE可用).
stack: 像Java中的Stack Trace一樣的錯誤堆棧信息 (僅Mozilla可用).
如果和return結合起來呢,接下來以一段代碼闡述:
function foo(){
try{
return false
}
finally{
return true
}
}
這段代碼執行效果如下
是不是感覺很疑惑,明明返回的是false但打印結果是true,注意這條規則:不管 try 語句是否完全執行,finally 語句最後都必須要執行,即使使用了跳轉語句跳出了異常處理結構,也必須在跳出之前先執行 finally 子句。
看下一個示例:
function bar(){
try{
baz();
}
catch{
return false;
}
finally{
return true
}
}
打印結果如下:
同樣也印證了上面規則,finally作爲異常判斷的整體必在最後執行。