-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Labels
Description
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