2012-05-06 34 views
41

Tengo un bucle que quiero salir; de esta manera:javascript salir para el bucle sin regresar

function MyFunction() { 

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

    if (i === SomeOtherCondition) { 

     // Do some work here 
     return false; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

El problema es que después de los Do some work here declaraciones ejecuta, quiero salir del bucle, pero todavía ejecutar la declaración falsa SomeOtherFunctions();

El retorno no salir del bucle, sino que también sale de la toda la función. ¿Cómo puedo solucionar esto?

Gracias.

+2

posible duplicado de [Cómo detener un bucle?] (Http://stackoverflow.com/questions/9830650/how-to-stop-a-for -loop) –

+1

Este es el tipo de cosas que aprenderá en los primeros capítulos de un tutorial básico de JavaScript. Es posible que desee considerar algo como http://eloquentjavascript.net para aprender los principios básicos del idioma. Su [segundo capítulo] (http://eloquentjavascript.net/chapter2.html) enseña la declaración 'break'. –

Respuesta

81

Está buscando el break statement.

+1

Y un enlace para javascript: http://www.w3schools.com/js/js_break.asp – Sietse

+0

Ah okkkk, gracias por la respuesta. – frenchie

+0

¿por qué te refieres a un ejemplo de C#? – ilanco

4

Rompe el ciclo completo. Continuar - se salta un paso en un bucle. Entonces omite el siguiente código;

9

O bien utilizar un descanso o sentencia continue

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

    if (i === SomeOtherCondition) { 

     // Do some work here 
     break; 
    } 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

o continuar elementos de procesamiento a excepción de los de una condición

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

    if (i != SomeOtherCondition) continue; 

    // Do some work here 
    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 
7

Varias personas han ofrecido break como la solución, y es de hecho el la mejor respuesta a la pregunta.

Sin embargo, simplemente para la corrección, me siento También debo añadir que la pregunta podría responderse al tiempo que conserva la declaración return, envolviendo el contenido de la condición if() en una función de cierre:

function MyFunction() { 

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

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

    SomeOtherFunction(); 
    SomeOtherFunction2(); 
} 

Mientras Por ejemplo, break es probablemente una mejor solución en este caso, ya que es la respuesta directa a la pregunta y el cierre introduce algunos factores adicionales (como cambiar el valor de this, limitar el alcance de las variables introducidas dentro de la función, etc.). Pero vale la pena ofrecerlo como una solución, porque es una técnica valiosa para aprender, si no necesariamente para ser utilizada en esta ocasión particular, sin duda para el futuro.

+0

bien, gracias. Mi filosofía es mantener mi código simple para que sea más fácil de mantener en el futuro. Voto arriba en caso de que otros quieran tomar esta dirección. – frenchie

+0

@frenchie - tienes toda la razón; esa es definitivamente la mejor filosofía. 'break' es la respuesta correcta en este caso. Los cierres son muy potentes y tienen muchos usos (la mayoría del código jQuery está basado en ellos), pero este caso es demasiado trivial para usar uno. – Spudley

1

¿Sería una buena manera establecer la variable i en algún valor de condición?

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

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

Aceptar tal vez este es un viejo tema, pero después de leer todas las respuestas me pregunto por qué es que nadie sugirió utilizar un bucle while en su lugar?

Supongo que en JavaScript se puede romper un bucle for (que no se puede hacer en muchos otros idiomas, o se considera una mala práctica) pero igual usaría bucles para las situaciones donde se desea iterar el bucle una cantidad fija de veces.

Esta sería mi sugerencia:

function MyFunction() { 

    var i = 0, 
     breakLoop = false; 

    while (i < SomeCondition && !breakLoop) { 

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

    i++; 

    } 

    SomeOtherFunction(); 
    SomeOtherFunction2(); 

} 
Cuestiones relacionadas