四季花海
2019-03-05 16:19:44
下面這段js執(zhí)行時,是先alert打印2,然后再alert 1. 也就是說先執(zhí)行了finally,然后再return的,這樣的執(zhí)行順序有沒有什么應(yīng)用場景?<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title></head><body> <script type="text/javascript">function Test() { var a = {b: 1} try { return a.b; } finally { a={b:2} alert('還執(zhí)行'+a.b) }}alert(Test())</script></body></html>
4 回答

www說
TA貢獻1775條經(jīng)驗 獲得超8個贊
為什么先執(zhí)行finally再執(zhí)行try里面的return呢?
這個本身就是try...catch...finally
結(jié)構(gòu)的執(zhí)行過程。
你可以這樣理解,finally是在當前函數(shù)里面的,屬于當前函數(shù)的范圍,如果try里面真的返回了,則執(zhí)行流程就已經(jīng)跳出當前函數(shù)的范圍了,那么當前函數(shù)里面的代碼就不可能再執(zhí)行到了。所以finally需要在try中的return真正返回之前執(zhí)行,然后再返回。

大話西游666
TA貢獻1817條經(jīng)驗 獲得超14個贊
完整的結(jié)構(gòu)是
try{
... //預(yù)期執(zhí)行的,一般不會安排返回操作
}catch{
... //捕獲錯誤執(zhí)行的,如果沒有捕獲錯誤就不執(zhí)行
}finally{
... //無論是否捕獲錯誤都會執(zhí)行的(除非try中有返回語句),一般用作一些清理工作
}
添加回答
舉報
0/150
提交
取消