使用try.处理Javascript错误。。抓住。。最后

使用try.处理Javascript错误。。抓住。。最后,javascript,error-handling,finally,Javascript,Error Handling,Finally,我怀疑我不正确地使用了finally块,并且我不理解其用途的基本原理 function myFunc() { try { if (true) { throw "An error"; } } catch (e) { alert (e); return false; } finally { return true;

我怀疑我不正确地使用了
finally
块,并且我不理解其用途的基本原理

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }
此函数将运行
catch
块,警告“错误”,然后返回true。为什么它不返回false

finally块包含要在try和catch块执行之后但在try…catch语句后面的语句之前执行的语句。无论是否引发异常,finally块都会执行。如果抛出异常,即使没有catch块处理异常,finally块中的语句也会执行

finally
块将始终运行,请在
try
块之后尝试返回
true

function myFunc() {
     try {
         if (true) {
               throw "An error";
          }
          return true;
     } catch (e) {
          alert (e);
          return false;
     } finally {
          //do cleanup, etc here
     }
 }

当您离开try块时,将执行Finally块。在代码中,当返回false时,就会发生这种情况。将返回值设置为false并尝试退出函数的。但首先它必须退出try块,该块触发finally并将返回值覆盖为true

许多人认为,每个函数只有一个返回语句是一种很好的编程实践。考虑在函数开始时创建var Value,并在整个函数中适当地将其设置为真或假,然后构造代码,使其正确地落入底部的单个返回。

function getTheFinallyBlockPoint(someValue) {
    var result;
    try {
        if (someValue === 1) {
            throw new Error("Don't you know that '1' is not an option here?");
        }
        result = someValue
    } catch (e) {
        console.log(e.toString());
        throw e;
    } finally {
        console.log("I'll write this no matter what!!!");
    }

    return result;
};

getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!");
getTheFinallyBlockPoint(1);

在浏览器的控制台上运行此命令,它可能会为您提供所需的答案。

使用单个返回值是解决简化功能意图和清晰度问题的有效且有用的策略。使用变量存储返回值也是解决复杂返回值逻辑的有效方法。然而,我不认为函数中的多个返回语句会自动成为糟糕编程实践的标志。在许多情况下,这很好:代码编写更简单,函数的意图传达给下一个需要理解它的程序员也更清晰<代码>函数a(i){if(i==未定义){return;}…}顶部的return语句非常清楚。强制整个函数位于if块内部是不必要的。