214

次のようなループがあるとします。

for (var i = 0; i < SomeArrayOfObject.length; i++) {

  if (SomeArray[i].SomeValue === SomeCondition) {

     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}

簡単な質問: はreturnループの実行自体を停止しますか?

4

7 に答える 7

283

はい、return実行を停止して関数を終了します。returnalways** はその関数をすぐに終了し、for ループ内にある場合はそれ以上実行しません。

自分で簡単に確認できます。

function returnMe() {
  for (var i = 0; i < 2; i++) {
    if (i === 1) return i;
  }
}

console.log(returnMe());

** 注:の特殊なケースについてはこの他の回答を参照してください。また、forEach ループに独自の関数スコープがあり、それを含む関数から抜け出せない方法についてはtry/catch/finallyこの回答を参照してください。

于 2012-07-30T01:41:25.830 に答える
74

ほとんどの場合 (これを含む)、すぐreturnに終了します。ただし、戻り値がtry付随するブロックを含むブロック内にある場合finally、 は常に実行され、内のfinallyを「オーバーライド」できます。returntry

function foo() {
    try {
        for (var i = 0; i < 10; i++) {
            if (i % 3 == 0) {
                return i; // This executes once
            }
        }
    } finally {
        return 42; // But this still executes
    }
}

console.log(foo()); // Prints 42
于 2012-07-30T01:45:31.663 に答える
13

ステートメントはreturn、ループが関数内にある場合にのみループを停止します (つまり、ループと関数の両方を終了します)。そうしないと、次のエラーが発生します。

Uncaught SyntaxError: Illegal return statement(…)

ループを終了するには、 を使用する必要がありますbreak

于 2016-03-10T08:21:50.750 に答える
5

はい、returnステートメントが実行されると、その時点で関数全体が終了します。

returnそれが行われず、ループを続け、そのステートメントを毎回実行するとどうなるか想像してみてください。考えてみると、値を返すという意味が無効になります。

于 2012-07-30T01:42:40.747 に答える
-2

「return」は関数を終了しますが、大量のデータを返したい場合は、ループ内で各データを 1 つずつ返すのではなく、配列に格納してから返すことができます。

于 2012-07-30T01:45:47.853 に答える