鍍金池/ 問答/HTML/ 以下代碼try catch兩個代碼塊為什么都執(zhí)行了?

以下代碼try catch兩個代碼塊為什么都執(zhí)行了?

下面這段js執(zhí)行時,是先alert打印2,然后再alert 1. 也就是說先執(zhí)行了finally,然后再return的,這樣的執(zhí)行順序有沒有什么應用場景?

<!DOCTYPE html>
<html lang="en">
<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>
回答
編輯回答
浪婳
為什么先執(zhí)行finally再執(zhí)行try里面的return呢?

這個本身就是try...catch...finally結構的執(zhí)行過程。

你可以這樣理解,finally是在當前函數(shù)里面的,屬于當前函數(shù)的范圍,如果try里面真的返回了,則執(zhí)行流程就已經(jīng)跳出當前函數(shù)的范圍了,那么當前函數(shù)里面的代碼就不可能再執(zhí)行到了。所以finally需要在try中的return真正返回之前執(zhí)行,然后再返回。

2017年3月18日 20:59
編輯回答
不二心

你的代碼里并沒有 catch語句,而是finally語句,finally語句的定義你可以查一查,一定會執(zhí)行的

2018年3月13日 15:31
編輯回答
裸橙

使用場景詳解:https://blog.csdn.net/aitangy...
其實也就是說自己處理不了當前的異常,或者不用處理的情況下,就不catch,直接往外拋;但是有一些清理工作需要做的話就在finally里執(zhí)行,因為try{}里的返回語句一定會在finally執(zhí)行之后才會執(zhí)行的(如果在finally寫了return ,那就直接退出方法了,try里面的不會再執(zhí)行);

2017年12月23日 00:31
編輯回答
有你在

完整的結構是

try{
... //預期執(zhí)行的,一般不會安排返回操作
}catch{
... //捕獲錯誤執(zhí)行的,如果沒有捕獲錯誤就不執(zhí)行
}finally{
... //無論是否捕獲錯誤都會執(zhí)行的(除非try中有返回語句),一般用作一些清理工作
}
2017年12月22日 03:56
編輯回答
夏夕

我以為我瞎了,看了五遍沒找到catch在哪

2017年8月2日 14:48