这两天面试,遇到好几个人,都是那种我感觉我肚子里的墨水都吐出来完了,难不倒人家,于是问了下家里那位老狗,从最开始就念叨着你问他try-catch在有return的情况下怎么执行的,执行结果是啥,我前面没理,后面确实有点遭不住了,来看看吧,肚子里添点墨水,别把脸丢大了~
做了几个测试:
一、数据执行顺序以及返回结果
原始:try
-catch
-finally
方法正确书写
created() {console.log('outer')console.log(this.tryCatch())},methods: {tryCatch() {let a = 1try {console.log('===try inner')a = 3console.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 = 4console.log('===finally 2')return a
}
其他不变,只是 finally
return
的结果被返回回去了。
再来在 try
中直接返回就返回 a
的值,而 finally
不改变呢?
try {a = 3return a
} ... finally {console.log('======finally inner')console.log('===finally 2')
}
有趣的是,try
中赋了值的 a
的值被返回了,同时 finally
的语句也执行了。
那么,同时在 try
finally
中都返回值,最后会获得什么呢?
try {a = 3return 3
} ... finally {console.log('======finally inner')a = 4console.log('===finally 2')reteurn 4
}