2012-05-06 11 views
41

Mam pętli, które chcę zakończyć; tak:Wywołanie javascript dla pętli bez zwracania

function MyFunction() { 

    for (var i = 0; i < SomeCondition; i++) { 

    if (i === SomeOtherCondition) { 

     // Do some work here 
     return false; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

Problemem jest to, że po wypowiedzi Do some work here wykonuje, chcę wyjść z pętli, ale nadal wykonać SomeOtherFunctions();

return false oświadczenie nie wyjść z pętli, ale także wyjście z cała funkcja. Jak to naprawić?

Dzięki.

+2

możliwe duplikat [Jak zatrzymać pętli for?] (Http://stackoverflow.com/questions/9830650/how-to-stop-a-for -lub) –

+1

Tego się nauczyłeś we wczesnych rozdziałach podstawowego samouczka JavaScript. Możesz rozważyć coś takiego jak http://eloquentjavascript.net, aby nauczyć się podstaw języka. Jego [rozdział drugi] (http://eloquentjavascript.net/chapter2.html) uczy instrukcji 'break'. –

Odpowiedz

81

Poszukujesz numeru break statement.

+1

I link do javascript: http://www.w3schools.com/js/js_break.asp – Sietse

+0

Ah okkkk, dzięki za odpowiedź. – frenchie

+0

dlaczego odwołujesz się do przykładu C#? – ilanco

4

Przerwa - przerywa całą pętlę. Kontynuuj - pomija krok w pętli. Pomija więc poniższy kod: kontynuuj;

9

Albo wykorzystać przerwę lub kontynuować wypowiedź

function MyFunction() { 
    for (var i = 0; i < SomeCondition; i++) { 

    if (i === SomeOtherCondition) { 

     // Do some work here 
     break; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

lub kontynuować przetwarzania elementów z wyjątkiem tych, w stanie

function MyFunction() { 
    for (var i = 0; i < SomeCondition; i++) { 

    if (i != SomeOtherCondition) continue; 

    // Do some work here 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 
7

Kilka osób oferowanych break jako rozwiązanie, a to jest rzeczywiście najlepsza odpowiedź na to pytanie.

jednak tylko pod względem kompletności, czuję Należy również dodać, że pytanie można odpowiedzieć zachowując oświadczenie return, owijając zawartość stanu if() w funkcji Zamknięcie:

function MyFunction() { 

    for (var i = 0; i < SomeCondition; i++) { 

    if (i === SomeOtherCondition) { 
     function() { 
      // Do some work here 
      return false; 
     }(); 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

jak ja powiedzmy, break jest prawdopodobnie lepszym rozwiązaniem w tym przypadku, ponieważ jest to bezpośrednia odpowiedź na pytanie, a zamknięcie wprowadza pewne dodatkowe czynniki (takie jak zmiana wartości this, ograniczenie zakresu zmiennych wprowadzanych do funkcji, itp.). Ale warto oferować jako rozwiązanie, ponieważ jest to cenna technika do nauki, jeśli nie koniecznie do wykorzystania w tej konkretnej okazji, to z pewnością na przyszłość.

+0

ok, dziękuję. Moją filozofią jest utrzymanie prostoty mojego kodu, aby łatwiej było go zachować w przyszłości. Wznowienie w przypadku, gdy inni chcą podążać w tym kierunku. – frenchie

+0

@frenchie - masz absolutną rację; to zdecydowanie najlepsza filozofia. 'break' jest właściwą odpowiedzią w tym przypadku. Zamknięcia są bardzo potężne i mają wiele zastosowań (większość kodu jQuery jest na nich zbudowana), ale ten przypadek jest zbyt trywialny, aby go użyć. – Spudley

1

Czy ustawienie zmiennej i na wartość warunku byłoby dobrym pomysłem?

for (var i=0; i<SomeCondition; i++) { 

    if (data[i]===true) { 
    //do stuff 
    i=SomeCondition; 
    } 
} 
1

OK może to stary temat, ale po przeczytaniu wszystkich odpowiedzi Zastanawiam się dlaczego jest to, że nikt nie zaproponował za pomocą pętli while zamiast?

Domyślam się, że w JavaScript można przerwać pętlę for (której nie można zrobić w wielu innych językach lub jest uważana za złą praktykę), ale nadal będę używać pętli tylko w sytuacjach, w których chcesz powtórzyć pętlę ustaloną ilość razy.

To byłaby moja sugestia:

function MyFunction() { 

    var i = 0, 
     breakLoop = false; 

    while (i < SomeCondition && !breakLoop) { 

    if (i === SomeOtherCondition) { 
     breakLoop = true; 
    } 

    i++; 

    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 

} 
Powiązane problemy