try-catch是捕捉异常的神器,不管是调试还是防止软件崩溃,都离不开它。今天笔者介绍一下加上finally后的执行顺序
function test() { try { console.log(1); } finally { console.log(2); }}console.log(test()); // 1 2
嗯!按顺序执行了。
我们在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
等等,难道不应该是 1 > from_try > 2
的顺序吗?
finally
中的内容,所以2会比from_try优先输出。 我们在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怎么不见了?
抱歉,按照上一条的规则,finally是会优先执行的,所以如果finally里有return语句,那么就真的return了。现在笔者在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都需要先经过finally。
结语
只是一个很小的细节。但也希望各位看官好好利用这种特性。