这两天面试,遇到好几个人,都是那种我感觉我肚子里的墨水都吐出来完了,难不倒人家,于是问了下家里那位老狗,从最开始就念叨着你问他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
}