次のようなループがあるとします。
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
簡単な質問:return
はループ自体の実行を停止しますか?
mostの場合(これを含む)、return
はすぐに終了します。ただし、try
ブロックを伴うfinally
ブロックに戻りがある場合、finally
ブロックは常に実行され、return
のtry
を「オーバーライド」できます。 。
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
return
ステートメントは、ループが関数内にある場合にのみループを停止します。そうしないと、次のエラーが表示されます。
Uncaught SyntaxError: Illegal return statement(…)
はい、return
ステートメントが実行されると、その時点で関数全体が終了します。
ループしなかった場合はどうなるか想像してください。ループを続け、そのたびにreturn
ステートメントを実行しますか?考えたときに値を返すという意味を無効にします。
答えはイエスです。returnステートメントを記述すると、コントロールはすぐに呼び出し元のメソッドに戻ります。 finallyブロックを除き、returnステートメントの後に実行されます。
また、finallyブロックの内部に戻った場合、最終的に返された値をオーバーライドできます。リンク: Try-catch-finally-returnの説明
以下のステートメント定義を返します。
Java Docs:
returnステートメントを使用して、制御フローブロックから分岐し、メソッドを終了できます。
MSDNドキュメント:
Returnステートメントは、関数の実行を終了し、呼び出し元の関数に制御を返します。呼び出し関数は、呼び出しの直後に実行が再開されます。
ウィキペディア:
Returnステートメントにより、実行は現在のサブルーチンを離れ、サブルーチンが呼び出された直後のコード内のポイント(リターンアドレス)から再開します。サブルーチン呼び出しを行う操作の一部として、通常はプロセスの呼び出しスタックに戻りアドレスが保存されます。多くの言語のreturnステートメントを使用すると、関数は、関数を呼び出したコードに返される戻り値を指定できます。
このコードは、for of
ループの最初の反復後にループを終了します。
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
return;
}
console.log(iterator.name);// 1
}
以下のコードは、条件にジャンプしてfor of
ループを継続します。
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
continue;
}
console.log(iterator.name); // 1 , 3
}
"return"は関数を終了しますが、大量のデータを返したい場合は、ループでデータを1つずつ返そうとする代わりに、配列に格納してから返すことができます。