Przypuśćmy, że mam taką pętlę:

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

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

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

Szybkie pytanie: Czy return powstrzyma wykonanie pętli w sobie i samo?

175
frenchie 30 lipiec 2012, 05:39

7 odpowiedzi

Najlepsza odpowiedź

Tak, return zatrzymuje wykonanie i wychodzi z funkcją. return Zawsze * Natychmiast wychodzi z jego funkcji, bez dalszego wykonania, jeśli jest w środku pętli.

Jest łatwo zweryfikowany dla siebie:

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

alert(returnMe());
// 1

** Uwagi: patrz Ta inna odpowiedź o specjalnym przypadku try/catch/finally i This Odpowiedź o tym, jak pętle Foreach ma swój własny zakres funkcji, nie wyrwa z zawierająca funkcję.

233
Dane Brouwer 18 wrzesień 2020, 15:09

W większości przypadków (w tym ten), return wyjdzie natychmiast. Jeśli jednak powrót jest w bloku try z towarzyszącym finally, zawsze wykonuje finally .

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
65
John Girata 30 lipiec 2012, 01:45

Ten kod wyjdzie z pętli po pierwszej iteracji w pętli 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
}

Poniższy kod zostanie przeskoczony na warunkach i kontynuować pętlę 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
}
10
PersianIronwood 16 kwiecień 2019, 09:23

Oświadczenie return zatrzymuje pętlę tylko wtedy, gdy jest w funkcji. W przeciwnym razie otrzymasz ten błąd:

Uncaught SyntaxError: Illegal return statement(…)
9
Damjan Pavlica 12 lipiec 2018, 09:07

Tak, po wykonywaniu oświadczenia return, cała funkcja jest opuszczona w tym samym punkcie.

Wyobraź sobie, co się stało, gdyby nie byłoby i kontynuowała zapętlanie, a za każdym razem, gdy return Oświadczenie? Unieważni to znaczenie zwrotu wartości, gdy o tym myślisz.

5
Keldon Alleyne 30 lipiec 2012, 01:42

Odpowiedź brzmi: tak, jeśli piszesz instrukcję powrotną, elementy sterujące wraca do metody dzwoniącego natychmiast. Z wyjątkiem ostatecznego bloku, który zostanie wykonany po instrukcji powrotnej.

I ostatecznie może również zastąpić zwróconą wartość, jeśli wrócisz w ostatecznie blokować. Link: Wyjaśnienie próbku wreszcie

Definicja wyciągu zwrotu zgodnie z:

Dokumenty Java:

Instrukcja zwrotu może być użyta do rozgrywki z bloku przepływu sterowania i wyjść z metody

Dokumentacja MSDN:

Oświadczenie zwrotu kończy wykonanie funkcji i Zwraca kontrolę do funkcji wywołania. Wykonanie wznawia się w Funkcja dzwonienia w punkcie natychmiast po połączeniu.

Wikipedia:

Oświadczenie zwrotu powoduje, że wykonywanie pozostawienia bieżącego podprogramu i wznowiono w punkcie w kodzie natychmiast po tym, jak wywołano podprogram, znany jako adres powrotny. Adres powrotny jest zapisany, zwykle na stosie wywołania procesu, w ramach działania wywołania podprogramu. Instrukcje powrotu W wielu językach umożliwiają funkcję określenia wartości powrotnej, która ma zostać przekazana z powrotem do kodu, który nazywany funkcją.

1
user1179299 1 czerwiec 2017, 02:43

"RETURN" Wychodzę z funkcji, ale jeśli chcesz zwrócić duże sumy danych, możesz zapisać go w tablicy, a następnie zwrócić go zamiast próbować zwrócić każdy kawałek danych 1 przez 1 w pętli.

-1
Brendon McBain 30 lipiec 2012, 01:45