Odpowiedzi:
Tak, return
zatrzymuje wykonywanie i wychodzi z funkcji. return
always ** natychmiast kończy swoją funkcję, bez dalszego wykonywania, jeśli znajduje się w pętli for.
Można to łatwo zweryfikować samodzielnie:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Uwagi: Zobacz tę inną odpowiedź dotyczącą specjalnego przypadku funkcji, try/catch/finally
a ta odpowiedź dotycząca tego, jak pętle forEach mają swój własny zakres funkcji, nie wyłamie się z funkcji zawierającej.
return
nadal wraca z bieżącej iteracji funkcji zwrotnej w swoim własnym zakresie, ale nie oczekuje się, że przerwie działanie całej metody wywołującej forEach()
. Więc nie wraca z samej pętli , ale wraca z wywołania zwrotnego wykonywanego przez pętlę. W przykładzie kodu z pytania połączonego dane wyjściowe 1,2,4,5
pomijają przyczynę 3
zwrotu.
return
że zawsze wróci z obecnego this
kontekstu.
break
czym return
.
W większości przypadków (w tym ten), return
zakończy się natychmiast. Jeśli jednak powrót znajduje się w try
bloku z towarzyszącym mu finally
blokiem, finally
zawsze wykonuje i może „przesłonić” znak return
w 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
Oświadczenie zatrzymuje pętlę tylko jeśli jest wewnątrz funkcji. W przeciwnym razie pojawi się ten błąd:
Uncaught SyntaxError: Illegal return statement(…)
Ten kod zakończy pętlę po pierwszej iteracji w for of
pętli:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
return;
}
console.log(iterator.name);// 1
}
poniższy kod wskoczy na warunek i będzie kontynuowany w for of
pętli:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
continue;
}
console.log(iterator.name); // 1 , 3
}
Tak, kiedyś return
instrukcji cała funkcja zostaje zakończona w tym momencie.
Wyobraź sobie, co by się stało, gdyby tak się nie stało i kontynuował zapętlanie i wykonywanie tego return
polecenia za każdym razem? Unieważniłoby to znaczenie zwracania wartości, kiedy o tym myślisz.
Odpowiedź brzmi: tak, jeśli napiszesz instrukcję return, kontrolka natychmiast wróci do metody wywołującej. Z wyjątkiem ostatniego bloku, który jest wykonywany po instrukcji return.
i wreszcie może również przesłonić wartość, którą zwróciłeś, jeśli wrócisz do wnętrza ostatniego bloku. POŁĄCZYĆ: Wyjaśnienie dotyczące try-catch-last-return
Definicja instrukcji zwrotu zgodnie z:
Dokumenty Java:
instrukcja return może służyć do odgałęzienia się z bloku przepływu sterowania i wyjścia z metody
Dokumentacja MSDN:
Instrukcja return przerywa wykonywanie funkcji i zwraca kontrolę do funkcji wywołującej. Wykonywanie zostaje wznowione w funkcji wywołującej w punkcie bezpośrednio po wywołaniu.
Wikipedia:
Instrukcja return powoduje, że wykonanie opuszcza bieżący podprogram i wznawia działanie w punkcie kodu bezpośrednio po wywołaniu podprogramu, znanym jako jego adres zwrotny. Adres zwrotny jest zapisywany, zwykle na stosie wywołań procesu, jako część operacji wykonywania wywołania podprogramu. Instrukcje Return w wielu językach umożliwiają funkcji określenie wartości zwracanej, która ma być przekazana z powrotem do kodu, który wywołał funkcję.
„return” nie wychodzi z funkcji, ale jeśli chcesz zwrócić duże sumy danych, możesz zapisać je w tablicy, a następnie zwrócić, zamiast próbować zwracać każdy fragment danych w pętli 1 na 1.