try catch捕獲異常

try/catch主要用于捕獲異常,try/catch語(yǔ)句包含了yigebtry塊,和至少有一個(gè)catch塊或者餓一個(gè)finally塊,有如下三種tyr聲明:

  • try...catch
  • try...finally
  • try...catch...finally
    try中放入可能會(huì)產(chǎn)生異常的語(yǔ)句或函數(shù)
    catch塊中包含要執(zhí)行的語(yǔ)句,當(dāng)try中拋出異常時(shí),catch塊會(huì)捕獲這個(gè)異常信息,并執(zhí)行catch塊中的代碼,如果在try中沒(méi)有異常拋出,catch塊將會(huì)跳過(guò)。

finallytry塊和catch塊之后執(zhí)行,無(wú)論是否有異常拋出或者是否被捕獲它總是執(zhí)行。當(dāng)在finally中拋出異常信息時(shí)會(huì)覆蓋try中的異常信息。

try {
    tryCode - 嘗試執(zhí)行代碼塊
}
catch(err) {
    catchCode - 捕獲錯(cuò)誤的代碼塊
} 
finally {
    finallyCode - 無(wú)論 try / catch 結(jié)果如何都會(huì)執(zhí)行的代碼塊
}

try…catch是同步代碼,只能捕獲“同步代碼”中的"運(yùn)行時(shí)異常","同步代碼"是無(wú)法獲取如setTimeout、Promise等異步代碼的異常

 try {
    console.log(1);
    setTimeout(function(){
       console.log(2);
       throw new Error("This is a test error 2");
    }, 0);
    console.log(3);
  } catch(err) {
  }
 console.log(4);
// 執(zhí)行結(jié)果為:1、3、4、2

假如 try {} catch(err) {} 這部分代碼為函數(shù)f1,setTimeOut里面定義的異步函數(shù),要在f1執(zhí)行完之后才會(huì)執(zhí)行,所以f1里面的catch是抓不到錯(cuò)誤。
try ... catch 作為同步代碼的異常捕獲語(yǔ)句,是在階段 1 執(zhí)行的。異步的錯(cuò)誤,發(fā)生階段 2,由此可知:已經(jīng)執(zhí)行完畢的 try ... catch 不可能捕獲到在它執(zhí)行完畢后所發(fā)生的錯(cuò)誤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容