【问题标题】:Isn't try / catch / finally redundant?try / catch / finally 不是多余的吗?
【发布时间】:2019-06-27 11:01:15
【问题描述】:

在 PHP、JS 等中,不管是否抛出异常,finally {} 都是在 try/catch 之后执行的。但这不只是try/catch之后所有代码的功能吗?

两个 sn-ps 的行为应该完全相同:

try {
    throwException();
} catch () {
} finally () {
    executeMe();
}

try {
    throwException();
} catch () {
}

executeMe();

【问题讨论】:

  • 如果你重新投掷或根本没有抓到怎么办?
  • 在你的第二个 sn-p 中,如果你在你的 returning 你的 try 或你的 catch 块中,executeMe() 不会被执行。如果您在 catch 块中重新抛出异常(或另一个异常),它也不会到达。使用finally到达。
  • 所以即使我跳出函数并返回,最终{} 也会被解析?然后是延迟返回,还是最终在返回之后执行且没有方法/对象上下文?
  • 无论何时退出 try/catch 块,最终都会在块之前的上下文中执行,即使在返回时也是如此
  • 这是针对java语言的,但行为是一样的:stackoverflow.com/questions/3861522/…

标签: javascript php


【解决方案1】:

这些 cmets 加起来是一个不错的答案:

在您的第二个 sn-p 中,如果您在 try 或 catch 块中返回,则不会执行 executeMe()。如果您在 catch 块中重新抛出异常(或另一个异常),它也不会到达。最后,它将达到。 ——haim770

所以 finally{} 会被解析,即使我通过返回跳出函数?然后是延迟返回,还是最终在返回之后执行并且没有方法/对象上下文? – Zsolt Szilagyi

finally 将在退出 try/catch 块时使用块之前的上下文执行,即使在返回时也是如此 – Aditya Jun

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2011-02-20
    • 2019-02-28
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多