这两天面试,遇到好几个人,都是那种我感觉我肚子里的墨水都吐出来完了,难不倒人家,于是问了下家里那位老狗,从最开始就念叨着你问他try-catch在有return的情况下怎么执行的,执行结果是啥,我前面没理,后面确实有点遭不住了,来看看吧,肚子里添点墨水,别把脸丢大了~
做了几个测试:
一、数据执行顺序以及返回结果
原始:try-catch-finally 方法正确书写
created() {
console.log('outer')
console.log(this.tryCatch())
},
methods: {
tryCatch() {
let a = 1
try {
console.log('===try inner')
a = 3
console.log('try 2')
} catch {
console.log('=====catch inner')
} finally {
console.log('======finally inner')
console.log('===finally 2')
console.log(a)
}
}
},

运行没毛病。
然后开始变种了,加上 return 会怎么样呢?:
// 1. 在 finally 当中加 return
finally {
console.log('======finally inner')
a = 4
console.log('===finally 2')
return a
}

其他不变,只是 finally return 的结果被返回回去了。
再来在 try 中直接返回就返回 a 的值,而 finally 不改变呢?
try {
a = 3
return a
} ... finally {
console.log('======finally inner')
console.log('===finally 2')
}

有趣的是,try 中赋了值的 a 的值被返回了,同时 finally 的语句也执行了。
那么,同时在 try finally 中都返回值,最后会获得什么呢?
try {
a = 3
return 3
} ... finally {
console.log('======finally inner')
a = 4
console.log('===finally 2')
reteurn 4
}


















![[C++随笔录] 红黑树](https://img-blog.csdnimg.cn/d0b5d8ae5e924023b4a115816862b588.png)