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。软件
只是一个很小的细节。但也但愿各位看官好好利用这种特性。异常