2010-07-25 16 views
294

Tengo una función:Salida anticipada de la función?

function myfunction() { 
    if (a == 'stop') // How can I stop the function here? 
} 

¿Hay algo así como exit() en JavaScript?

+3

¿desea detener la ejecución o devolver? –

+0

@Ken Struys ¿cuál es la diferencia? como entiendo, si regreso, ¿detiene la ejecución? no es así? – Simon

+3

Bueno, esto es lo que pasa, el uso de una devolución simplemente regresará al contexto de la función de llamada. Si realmente desea la semántica de salida que desea detener la ejecución, puede hacer algo como esto: http://vikku.info/codesnippets/javascript/forcing-javascript-to-abort-stop-javascript-execution-at- any-time/ –

Respuesta

467

Puede simplemente usar return.

function myfunction() { 
    if(a == 'stop') 
     return; 
} 

Esto enviará un valor de retorno de undefined a lo que se llama la función.

var x = myfunction(); 

console.log(x); // console shows undefined 

Por supuesto, puede especificar un valor de retorno diferente. Cualquier valor que se devuelva se registrará en la consola utilizando el ejemplo anterior.

return false; 
return true; 
return "some string"; 
return 12345; 
+3

Sé que esta es una publicación anterior, y esta es una práctica común PERO creo que esta es una mala solución. Si se SUPONEED la función para devolver un valor, debe usar return. Si simplemente usa el retorno a ciegas, podría tener problemas más adelante. Especialmente si comienzas a enlazar eventos que tienen un retorno en ellos. Consulte esta publicación para obtener más información: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ – dbme

+48

@dbme: Funciones en JavaScript * always * return. La declaración de devolución está implícita si no se ha proporcionado. El valor de retorno predeterminado es 'undefined', y eso es lo que proporciona mi solución principal. El artículo que mencionaste está hablando de 'return false' en un manejador de eventos jQuery. Ese es un problema completamente diferente. Esta es la forma correcta de salir de una función de JavaScript. Obviamente, si la persona que llama confía en el valor devuelto, el valor debe definirse adecuadamente. – user113716

+3

... Una variación implícita sería 'if (a! = 'Stop') {/ * ejecutar mi código * /}' para que el código solo se ejecute cuando 'a' no es igual a' 'stop'' sin proporcionar un 'retorno' explícito. Pero el valor de retorno * es idéntico a mi solución *. En ambos casos, se devolverá 'undefined'. – user113716

15

Este:

function myfunction() 
{ 
    if (a == 'stop') // How can I stop working of function here? 
    { 
     return; 
    } 
} 
3

si usted está buscando un script para evitar la presentación de la forma en que algunos errores encontrados, este método debería funcionar

function verifyData(){ 
    if (document.MyForm.FormInput.value.length == "") { 
      alert("Write something!"); 
    } 
    else { 
      document.MyForm.submit(); 
    } 
} 

cambio del botón de envío Tipo al "botón"

<input value="Save" type="button" onClick="verifyData()"> 

espero que esta ayuda.

-4

Si está usando jquery. Esto debería evitar que la función burbujee hasta que la función principal que llama a esto también se detenga.

function myfunction(e) 
    { 
     e.stopImmediatePropagation(); 
     ................ 
    } 
+5

'stopImmediatePropagation()' no es algo de jQuery, y detener la propagación no es lo mismo cosa como salir de una función. –

13
function myfunction() { 
    if(a == 'stop') 
     return false; 
} 

return false; es mucho mejor que simplemente return;

+9

¿Por qué es 'falso' mejor? Yo diría que el predeterminado 'undefined' es mejor en el caso genérico. De cualquier manera, tienes razón al decir que a menudo es mejor devolver un valor significativo. –

+0

Depende del programador y depende del caso de uso. Por ejemplo, una función puede validar algo, por lo que si la validación falla, tiene más sentido devolver 'false' que' undefined'. –

40

Aparentemente se puede hacer esto:

function myFunction() {myFunction:{ 
    console.log('i get executed'); 
    break myFunction; 
    console.log('i do not get executed'); 
}} 

alcances Véase el bloque mediante el uso de una etiqueta: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

I no puedo ver ningún inconveniente todavía Pero no parece ser un uso común.

obtenida esta respuesta: JavaScript equivalent of PHP’s die

+0

¿es posible usar esta solución con el módulo de exportación nodejs? cuando lo intento obtengo un error de "etiqueta no utilizada". exports.MyFunction = function (data) {myFunction: {break myFunction;}} –

6

Utilizando un enfoque un poco diferente, puede utilizar try catch, la sentencia throw.

function name() { 
    try { 
     ... 

     //get out of here 
     if (a == 'stop') 
      throw "exit"; 

     ... 
    } catch (e) { 
     // TODO: handle exception 
    } 
} 
2

El uso de un return se detendrá la función y volver undefined, o el valor que se especifica con el comando de retorno.

function myfunction(){ 
    if(a=="stop"){ 
     //return undefined; 
     return; /** Or return "Hello" or any other value */ 
    } 
} 
+2

¿Qué agrega específicamente su respuesta que no estaba ya incluida en la respuesta aceptada de hace 6 años? – Bryan

0

exit(); se puede usar para ir a la siguiente validación.

-7

tipo cualquier orden aleatorio que genera un error, por ejemplo:

exit 

o

die:-) 
+0

Esto puede detener la ejecución de todos los códigos, no solo el resto de la función. Compruebe el violín: https://jsfiddle.net/b3k0xo7n/1/ – treecon

0

No me gusta responder a cosas que no son una solución real ...

. ..pero cuando encontré este mismo problema, hice la siguiente solución:

function doThis() { 
    var err=0 
    if (cond1) { alert('ret1'); err=1; } 
    if (cond2) { alert('ret2'); err=1; } 
    if (cond3) { alert('ret3'); err=1; } 
    if (err < 1) { 
    // do the rest (or have it skipped) 
    } 
} 

Espero que pueda ser útil para cualquier persona.

Cuestiones relacionadas