最后使用try .. catch ..进行Javascript错误处理

nic*_*ckf 55 javascript error-handling finally

我怀疑我正在finally错误地使用该块,而且我不了解其目的的基本原理......

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }
Run Code Online (Sandbox Code Playgroud)

此函数将运行catch块,警告"一个错误",但然后返回true.为什么不返回虚假?

Gil*_*ean 83

finally块包含在try和catch块执行之后但在try ... catch语句之后的语句之前执行的语句.finally块执行是否抛出异常.如果抛出异常,即使没有catch块处理异常,finally块中的语句也会执行.更多

finally块将始终运行,尝试truetry块后返回

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


小智 10

离开try块时,最后执行块.在你的代码中,这会在你返回false时发生.这会将返回值设置为false并尝试退出该函数.但首先它必须退出触发finally的try块并将返回值覆盖为true.

许多人认为每个函数都有一个返回语句是一个很好的编程习惯.考虑在函数的开头创建一个var retval,并在整个函数中将其设置为true或false,然后构造代码,使其正确地落到底部的单个返回.

  • 使用单个返回值是解决简化函数意图和清晰度问题的一种有效且有用的策略.使用变量存储返回值也是解决复杂返回值逻辑的有效方法.但是,我不认为可以说函数中的多个return语句会自动表示编程错误.在许多情况下,它很好:在编写代码时更简单,并且清楚地将函数的意图传达给需要理解它的下一个程序员.`function a(i){if(i === undefined){return;} ...}` (18认同)
  • 顶部的回报声明非常清楚.强制整个函数位于if块内是没有必要的. (6认同)