try-catch-finally,如果執行 catch,還會執行 finally 嗎?

2025-01-13

try-catch-finally 執行流程:

Try-Catch-Finally執行流程圖

文字版流程
javascript
function test(num) {
  // num === 1:return 101
  // num !== 1:return 202
  try {
    if (num === 1) {
      return (num += 100);
    } else {
      throw new Error('num is not 1');
    }
  } catch (e) {
    return (num += 200);
  }
  finally {
    console.log(num);  // 會先執行 try 或 catch 的 return 表達式,再執行 finally,最後 return
    //  → 101,if num === 1
    //  → 202,if num !== 1
  }
}

console.log(test(1));  // → 101
console.log(test(2));  // → 202

結論: finally 永遠會執行

瓜熊

你好,我是瓜熊,熱愛研究新鮮的東西。