中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

try-catch-finally,被你忽略掉的執(zhí)行順序

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

try-catch是捕捉異常的神器,不管是調(diào)試還是防止軟件崩潰,都離不開它。今天筆者介紹一下加上finally后的執(zhí)行順序

function test() {
  try {
    console.log(1);
  } finally {
    console.log(2);
  }
}

console.log(test()); // 1 2

嗯!按順序執(zhí)行了。


我們在try中加入return語句

function test() {
  try {
    console.log(1);
    return 'from_try';
  } catch (e) {
    // TODO
  } finally {
    console.log(2);
  }
}

console.log(test()); // 1 2 from_try

等等,難道不應(yīng)該是 1 > from_try > 2的順序嗎?
抱歉啊,是這樣的,在try和catch的代碼塊中,如果碰到return語句,那么在return之前,會先執(zhí)行finally中的內(nèi)容,所以2會比from_try優(yōu)先輸出。


我們在finally中也加入return語句

function test() {
  try {
    console.log(1);
    return 'from_try';
  } catch (e) {
    // TODO
  } finally {
    console.log(2);
    return 'from_finally';
  }
}

console.log(test()); // 1 2 from_finally

買噶的,我的from_try怎么不見了?
抱歉,按照上一條的規(guī)則,finally是會優(yōu)先執(zhí)行的,所以如果finally里有return語句,那么就真的return了。


現(xiàn)在筆者在try語句塊中故意報錯

function test() {
  try {
    console.log(1);
    throw new Error('throw');
  } catch (e) {
    console.log(e.message);
    return 'from_catch';
  } finally {
    console.log(2);
  }
}

console.log(test()); // 1 throw 2 from_catch

看來,try和catch的return都需要先經(jīng)過finally。

結(jié)語

只是一個很小的細節(jié)。但也希望各位看官好好利用這種特性。

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:關(guān)于3個Python模板庫的比較

下一篇:使用爬蟲技術(shù)實現(xiàn) Web 頁面資源可用性檢測