Blog
Blog copied to clipboard
执行机制 - try-catch-finally执行机制
try-catch-finally执行机制
执行过程
- 执行
try
中代码,将执行结果标记为Result
; - 若
try
中执行代码报错,则执行catch
中代码,并用执行结果更新Result
; - 执行
finally
中代码,若有返回值,则用返回值更新Result
,完成执行过程。
主要有以下几个坑点要注意避免:
-
try
和catch
中的return
语句不影响finally
中代码的执行 -
finally
中有return
语句,会覆盖try
和catch
中的返回值
/* ------ `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