摘要:是捕捉異常的神器,不管是調(diào)試還是防止軟件崩潰,都離不開它。今天筆者介紹一下加上后的執(zhí)行順序嗯按順序執(zhí)行了。現(xiàn)在筆者在語(yǔ)句塊中故意報(bào)錯(cuò)看來(lái),和的都需要先經(jīng)過。
try-catch是捕捉異常的神器,不管是調(diào)試還是防止軟件崩潰,都離不開它。今天筆者介紹一下加上finally后的執(zhí)行順序
function test() { try { console.log(1); } finally { console.log(2); } } console.log(test()); // 1 2
嗯!按順序執(zhí)行了。
我們?cè)趖ry中加入return語(yǔ)句
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語(yǔ)句,那么在return之前,會(huì)先執(zhí)行finally中的內(nèi)容,所以2會(huì)比f(wàn)rom_try優(yōu)先輸出。
我們?cè)趂inally中也加入return語(yǔ)句
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是會(huì)優(yōu)先執(zhí)行的,所以如果finally里有return語(yǔ)句,那么就真的return了。
現(xiàn)在筆者在try語(yǔ)句塊中故意報(bào)錯(cuò)
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
看來(lái),try和catch的return都需要先經(jīng)過finally。
結(jié)語(yǔ)只是一個(gè)很小的細(xì)節(jié)。但也希望各位看官好好利用這種特性。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107985.html
摘要:是捕捉異常的神器,不管是調(diào)試還是防止軟件崩潰,都離不開它。今天筆者介紹一下加上后的執(zhí)行順序嗯按順序執(zhí)行了?,F(xiàn)在筆者在語(yǔ)句塊中故意報(bào)錯(cuò)看來(lái),和的都需要先經(jīng)過。 try-catch是捕捉異常的神器,不管是調(diào)試還是防止軟件崩潰,都離不開它。今天筆者介紹一下加上finally后的執(zhí)行順序 function test() { try { console.log(1); } fin...
摘要:當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適的異常處理器,則運(yùn)行時(shí)系統(tǒng)終止。不可查異常編譯器不要求強(qiáng)制處置的異常包括運(yùn)行時(shí)異常與其子類和錯(cuò)誤。 目錄介紹 1.什么是異常 2.異常 2.1 異常的概述和分類【了解】 2.2 JVM默認(rèn)是如何處理異常的【理解】 2.3 異常處理的兩種方式【理解】 2.4 try...catch的方式處理異?!菊莆铡?2.5 編譯期異常和運(yùn)行期異常的區(qū)別【理解】...
摘要:基礎(chǔ)系列的與方法類初始化順序線程池如何彈性伸縮的幾個(gè)要點(diǎn)的緩存什么場(chǎng)景下使用阻塞隊(duì)列的使用及模式中的序本文主要簡(jiǎn)述中有的情況。參考關(guān)于中的執(zhí)行順序 Java基礎(chǔ)系列 Java的hashcode與equals方法 Java類初始化順序 ThreadPoolExecutor線程池如何彈性伸縮 HashMap的幾個(gè)要點(diǎn) Integer的緩存 什么場(chǎng)景下使用阻塞隊(duì)列 volatile的使用及...
摘要:被你忽略的尾調(diào)用尾調(diào)用是什么在有一個(gè)新特性尾調(diào)用用最簡(jiǎn)單的一句話描述就是某個(gè)函數(shù)的最后一步再調(diào)用另一個(gè)函數(shù),聽起來(lái)挺簡(jiǎn)單的,但是它的功能特別強(qiáng)大,直接給你擼個(gè)例子吧。如果函數(shù)內(nèi)部還調(diào)用函數(shù),那就還有一個(gè)的調(diào)用記錄棧,以此類推。 title: 被你忽略的‘尾調(diào)用’date: 2017-05-02 16:52:22 tags: [ES6,javascript] 尾調(diào)用是什么? 在ES6有...
摘要:關(guān)于異常處理的文章已有相當(dāng)?shù)钠疚暮?jiǎn)單總結(jié)了的異常處理機(jī)制,并結(jié)合代碼分析了一些異常處理的最佳實(shí)踐,對(duì)異常的性能開銷進(jìn)行了簡(jiǎn)單分析。是程序正常運(yùn)行中,可以預(yù)料的意外情況,應(yīng)該被捕獲并進(jìn)行相應(yīng)處理。 關(guān)于異常處理的文章已有相當(dāng)?shù)钠?,本文?jiǎn)單總結(jié)了Java的異常處理機(jī)制,并結(jié)合代碼分析了一些異常處理的最佳實(shí)踐,對(duì)異常的性能開銷進(jìn)行了簡(jiǎn)單分析。博客另一篇文章《[譯]Java異常處理的最...
閱讀 1866·2021-09-23 11:21
閱讀 710·2019-08-30 15:55
閱讀 844·2019-08-29 15:40
閱讀 549·2019-08-29 12:56
閱讀 3177·2019-08-26 12:00
閱讀 3568·2019-08-23 18:24
閱讀 2261·2019-08-23 17:08
閱讀 1650·2019-08-23 17:03