55

finallyブロックの使い方が間違っていて、その目的の基本を理解していない疑いがあります...

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

この関数はcatchブロックを実行し、「エラー」を警告しますが、true を返します。false を返さないのはなぜですか?

4

3 に答える 3

84

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
     }
 }
于 2008-11-13T05:11:29.000 に答える
10

try ブロックを離れると、finally ブロックが実行されます。コードでは、これは false を返すときに発生します。これにより、戻り値が false に設定され、関数を終了しようとします。ただし、最初に try ブロックを終了する必要があります。これにより、finally がトリガーされ、戻り値が true に上書きされます。

関数ごとに 1 つの return ステートメントを使用することは、優れたプログラミング手法であると多くの人が考えています。関数の先頭に var retval を作成し、関数全体で必要に応じて true または false に設定してから、最後に単一の戻り値に正しくフォールスルーするようにコードを構造化することを検討してください。

于 2008-11-13T05:42:10.060 に答える