Open logan70 opened 4 years ago
ECMA标准定义
try
Result
catch
finally
主要有以下几个坑点要注意避免:
return
/* ------ `finally`中代码一定会执行 ------ */ function test1() { try { console.log('try') throw Error() } catch (e) { console.log('catch') return } finally { console.log('finally') } } test1() // <- try // <- catch // <- finally /* ------ `finally`中代码执行完才算执行完成 ------ */ function test2() { try { console.log('try_log'); return 'try_return' } finally { console.log('finally_log') } } console.log(test2()) // <- try_log // <- finally_log // <- try_return /* ------ `finally`中的return会覆盖try/catch中的return ------ */ function test3() { try { return 'try_return' } finally { return 'finally_return' } } console.log(test3()) // <- finally_return function test4() { try { throw Error() } catch (e) { return 'catch_return' } finally { return 'finally_return' } } console.log(test4()) // <- finally_return
try-catch-finally执行机制
执行过程
try
中代码,将执行结果标记为Result
;try
中执行代码报错,则执行catch
中代码,并用执行结果更新Result
;finally
中代码,若有返回值,则用返回值更新Result
,完成执行过程。主要有以下几个坑点要注意避免:
try
和catch
中的return
语句不影响finally
中代码的执行finally
中有return
语句,会覆盖try
和catch
中的返回值