在 try 块中返回之后,javascript finally 块的执行顺序是什么

cam*_*tem 6 javascript

关于:Java try-finally 返回设计问题

这并不能完全回答我的问题,也可能不相关,因为它是 java 而不是 javascript:try、catch 和 finally 中的执行顺序是什么

我知道将 return 放入finally块中将优先于catch块中的 return ,但是序列事件如何与以下代码一起使用?

function confusion(){
  var test = "a";
  try{
    return test;
  }
  finally{
    test = "b";
  }
}

console.log("Result", confusion()); //"a"
Run Code Online (Sandbox Code Playgroud)

我对返回任何东西的一般理解是控制通常返回到调用方法的上下文,因此继续执行的事实让我感到困惑。

在这种情况下,我认为它可能会像这样:

- 函数设置为返回test->finally更改值test->test返回更新后的值。

但相反,它似乎为该try块保留了某种状态并finally错过了时间?

T.J*_*der 10

当你return走出了一条trycatch块具有关联finally块,执行进入finally块,因为这是它的宗旨是:以处理共同完成的动作try/ catch

在您的代码中,发生的事情return是:

  1. 的值test是从变量中读取的,留作以后使用。

  2. 控制权传递给finally

  3. 代码finally更改了变量的值test(这对 #1 中留出的值没有影响)。

  4. finally遇到块的结尾时,该函数返回,使用#1 中设置的值作为其返回值。

这是覆盖在try声明/运行时语义:评估的规范,或许更可读的try...catch上MDN下“的finally条款。”

请注意,finally可以通过抛出异常或返回新值来中断返回过程。如果是这样的那些东西要么,它胜在returntry(或catch)。


旁注重新您的链接的Java问题:JavaScript的try/ catch/finally工程就像Java的除外:1。你只能有一个catch块,因为异常没有被类型化,和2 JavaScript没有Java的try-with-resources声明。