下面说下在javascript中try-catch-finally的执行顺序
1、不管有没有出现异常,都会执行finally中的代码
2、不管try catch中有没有return,都会执行finally中的代码
3、若try或者catch中有return,finally中没有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后才会执行try、catch中的return
4、若try、catch没有return,finally中有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后执行finally中的return
5、若try、catch有return,finally中有return,则一定是执行了try、catch中的语句,接着执行finally中的语句,最后执行finally中的return
即finally是一定会执行,在try、catch语句执行之后、return语句执行之前执行;若finally没有return,则用try、catch的return;若finally有return,不管try、catch是否有return,都用finally的return
下面看一下demo:
<!doctype html>
<body>
<script>
test1()
// 输出结果
// try
// catch
test2()
// 输出结果
// try
// error
// catch
console.log(test3())
// 输出结果
// try
// finally
// try fragment
console.log(test4())
// 输出结果
// try
// finally
// finally fragment
console.log(test5())
// 输出结果
// try
// finally
// try fragment
console.log(test6())
// 输出结果
// try
// error
// finally
// catch fragment
console.log(test7())
// 输出结果
// try
// error
// finally
// finally fragment
console.log(test8())
// 输出结果
// try
// error
// finally
// finally fragment
// 没有return
function test1() {
try {
console.log('try')
} finally {
console.log('catch')
}
}
function test2() {
try {
console.log('try')
throw new Error('error')
} catch (error) {
console.log(error.message)
} finally {
console.log('finally')
}
}
// 有return
function test3() {
try {
console.log('try')
return 'try fragment'
} finally {
console.log('finally')
}
}
function test4() {
try {
console.log('try')
} finally {
console.log('finally')
return 'finally fragment'
}
}
function test5() {
try {
console.log('try')
return 'try fragment'
} finally {
console.log('finally')
return 'finally fragment'
}
}
function test6() {
try {
console.log('try')
throw new Error('error')
} catch (error) {
console.log(error.message)
return 'catch fragment'
} finally {
console.log('finally')
}
}
function test7() {
try {
console.log('try')
throw new Error('error')
} catch (error) {
console.log(error.message)
} finally {
console.log('finally')
return 'finally fragment'
}
}
function test8() {
try {
console.log('try')
throw new Error('error')
} catch (error) {
console.log(error.message)
return 'catch fragment'
} finally {
console.log('finally')
return 'finally fragment'
}
}
</script>
</body>
</html>