这并不能完全回答我的问题,也可能不相关,因为它是 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走出了一条try或catch块具有关联finally块,执行进入finally块,因为这是它的宗旨是:以处理共同完成的动作try/ catch。
在您的代码中,发生的事情return是:
的值test是从变量中读取的,留作以后使用。
控制权传递给finally。
代码finally更改了变量的值test(这对 #1 中留出的值没有影响)。
当finally遇到块的结尾时,该函数返回,使用#1 中设置的值作为其返回值。
这是覆盖在该try声明/运行时语义:评估的规范,或许更可读的try...catch上MDN下“的finally条款。”
请注意,finally可以通过抛出异常或返回新值来中断返回过程。如果是这样的那些东西要么,它胜在return中try(或catch)。
旁注重新您的链接的Java问题:JavaScript的try/ catch/finally工程就像Java的除外:1。你只能有一个catch块,因为异常没有被类型化,和2 JavaScript没有Java的try-with-resources声明。
| 归档时间: |
|
| 查看次数: |
2898 次 |
| 最近记录: |