try-catch是捕捉異常的神器,無論是調試仍是防止軟件崩潰,都離不開它。今天筆者介紹一下加上finally後的執行順序調試
function test() { try { console.log(1); } finally { console.log(2); } } console.log(test()); // 1 2
嗯!按順序執行了。code
咱們在try中加入return語句io
function test() { try { console.log(1); return 'from_try'; } catch (e) { // TODO } finally { console.log(2); } } console.log(test()); // 1 2 from_try
等等,難道不該該是 1 > from_try > 2
的順序嗎?
抱歉啊,是這樣的,在try和catch的代碼塊中,若是碰到return語句,那麼在return以前,會先執行finally
中的內容,因此2會比from_try優先輸出。console
咱們在finally中也加入return語句function
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怎麼不見了?
抱歉,按照上一條的規則,finally是會優先執行的,因此若是finally裏有return語句,那麼就真的return了。class
如今筆者在try語句塊中故意報錯test
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都須要先通過finally。軟件
只是一個很小的細節。但也但願各位看官好好利用這種特性。異常