2012-05-06 19 views
41

Çıkmak istediğim bir döngü var; Böyle:javascript dönmeden döngü için çıkıyor

function MyFunction() { 

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

    if (i === SomeOtherCondition) { 

     // Do some work here 
     return false; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

sorun o da çıkar Do some work here ifadeleri yürütür sonra, döngü için çıkmak yok SomeOtherFunctions();

dönüş yanlış deyimi yürütme hala döngü çıkmak ama istediğinizi ancak tüm işlev. Bunu nasıl düzeltirim?

Teşekkürler.

+2

olası yinelenen [döngü için nasıl engellenir?] (Http://stackoverflow.com/questions/9830650/how-to-stop-a-for -loop) –

+1

Bu, basit bir JavaScript öğreticisinin ilk bölümlerinde öğreneceğiniz bir şeydir. Dil temellerini öğrenmek için http://eloquentjavascript.net gibi bir şey düşünmek isteyebilirsiniz. Onun [ikinci bölüm] (http://eloquentjavascript.net/chapter2.html) 'break' ifadesini öğretir. –

cevap

81

break statement ürününü arıyorum.

+1

Ve javascript için bir bağlantı: http://www.w3schools.com/js/js_break.asp – Sietse

+0

Ah okkkk, cevap için teşekkürler. – frenchie

+0

neden bir C# örneğini kullanıyorsunuz? – ilanco

4

Kesintisiz tüm döngüyü bozar. Devam - döngüdeki bir adımı atlar. Bu yüzden devam eden kodu atlar;

9

Ya bir mola kullanın veya deyim devam

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

    if (i === SomeOtherCondition) { 

     // Do some work here 
     break; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

Ya

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

    if (i != SomeOtherCondition) continue; 

    // Do some work here 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 
7

Birkaç kişi çözüm olarak break teklif var bir durumda olanlar hariç işleme öğelerini devam edeceğini ve gerçekten de hiç Sorunun en iyi cevabı. I gibi

function MyFunction() { 

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

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

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

:

Ancak, sadece şeyiyle ben, return ifadeyi koruyarak ben de bir kapatma işlevinde if() durumun içeriğini sararak soru cevap olabileceğini eklemek gerekir hissediyorum break, bu soruya muhtemelen daha iyi bir çözümdür, çünkü sorunun doğrudan cevabı ve kapama bazı ek faktörler getirmektedir (this'un değerinin değiştirilmesi gibi, işlevin içine girilen değişkenlerin kapsamını sınırlamak gibi). Ama bir çözüm olarak önerilmeye değer, çünkü mutlaka bu gelecek vesilesiyle kullanılmayacaksa, kesinlikle geleceğe yönelik olarak öğrenilmesi gereken değerli bir teknik.

+0

tamam, teşekkürler. Benim felsefem, kodumu basit tutmak, böylece gelecekte bakımı daha kolay olacak. Diğerleri bu yöne çekmek istendiğinde oy verildi. – frenchie

+0

@frenchie - kesinlikle haklısınız; Bu kesinlikle en iyi felsefedir. Bu durumda 'ara' doğru cevaptır. Kapanışlar çok güçlüdür ve birçok kullanıma sahiptir (çoğu jQuery kodu bunlara dayandırılmıştır), ancak bu durum bir tane kullanmak için çok önemsizdir. – Spudley

1

Bazı değişken değerlere i değişkenini ayarlamak iyi bir yol olur mu?

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

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

Tamam belki bu eski bir konu olmakla birlikte, bütün cevapları okuduktan sonra ben neden kimse yerine while döngüsü kullanılmasının önerdi olmasıdır merak ediyorum?

JavaScript'te for döngüsünü kırabiliyorsunuz (ki bu pek çok başka dilde yapamazsınız, ya da kötü bir uygulama olarak kabul edilir), ancak döngüleri yinelemek için döngüleri kullanmak isterim. sabit bir miktar.

Bu önerim şu şekilde olacak: içinde

function MyFunction() { 

    var i = 0, 
     breakLoop = false; 

    while (i < SomeCondition && !breakLoop) { 

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

    i++; 

    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 

}