Tengo una funcion:
function myfunction() {
if (a == 'stop') // How can I stop the function here?
}
¿Hay algo como exit()
en JavaScript?
fuente
Tengo una funcion:
function myfunction() {
if (a == 'stop') // How can I stop the function here?
}
¿Hay algo como exit()
en JavaScript?
Solo puedes usar return
.
function myfunction() {
if(a == 'stop')
return;
}
Esto enviará un valor de retorno de undefined
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 devuelto se registrará en la consola utilizando el ejemplo anterior.
return false;
return true;
return "some string";
return 12345;
undefined
, y eso es lo que proporciona mi solución principal. El artículo al que hizo referencia se refiere a hacer return false
en un controlador de eventos jQuery. Esa es una cuestión completamente diferente. Esta es la forma correcta de salir de una función de JavaScript. Obviamente, si la persona que llama depende del valor devuelto, el valor debe definirse adecuadamente.
if(a != 'stop') { /* run my code */ }
para que el código solo se ejecute cuando a
no sea igual 'stop'
sin proporcionar un explícito return
. Pero el valor de retorno es idéntico a mi solución . En ambos casos, undefined
será devuelto.
undefined
(o no recibe algún otro valor) como un valor de retorno, entonces deberá cumplir con la especificación de esa API y devolver el valor correcto. En general, para un sistema de manejo de eventos, esperará undefined
como una simple indicación de que el controlador ha finalizado, y no hay más instrucciones. Con jQuery, return false;
tiene un significado especial dando instrucciones para hacer un preventDefault
y stopPropagation
.
Aparentemente puedes hacer esto:
function myFunction() {myFunction:{
console.log('i get executed');
break myFunction;
console.log('i do not get executed');
}}
Vea los ámbitos de bloque mediante el uso de una etiqueta: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label
No puedo ver ninguna desventaja todavía. Pero no parece un uso común.
Derivó esta respuesta: JavaScript equivalente del dado de PHP
function myfunction() {
if(a == 'stop')
return false;
}
return false;
es mucho mejor que solo return;
false
mejor? Yo diría que el valor predeterminado undefined
es mejor en el caso genérico. De cualquier manera, tiene razón al decir que a menudo es mejor devolver un valor significativo.
false
que undefined
.
Esta:
function myfunction()
{
if (a == 'stop') // How can I stop working of function here?
{
return;
}
}
Usando un enfoque un poco diferente, puede usar try catch
, con la declaración throw.
function name() {
try {
...
//get out of here
if (a == 'stop')
throw "exit";
...
} catch (e) {
// TODO: handle exception
}
}
Si está buscando un script para evitar enviar el formulario cuando se encuentran algunos errores, este método debería funcionar
function verifyData(){
if (document.MyForm.FormInput.value.length == "") {
alert("Write something!");
}
else {
document.MyForm.submit();
}
}
cambie el tipo de botón Enviar a "botón"
<input value="Save" type="button" onClick="verifyData()">
espero que esto ayude.
Usar a return
detendrá la función y devolverá undefined
, o el valor que especifique con el comando return.
function myfunction(){
if(a=="stop"){
//return undefined;
return; /** Or return "Hello" or any other value */
}
}
No me gusta responder 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 cualquiera.
Creo que lanzar un nuevo error es un buen enfoque para detener la ejecución en lugar de simplemente devolver o devolver falso. Por ej. Estoy validando una cantidad de archivos que solo permito un máximo de cinco archivos para cargar en una función separada.
validateMaxNumber: function(length) {
if (5 >= length) {
// Continue execution
}
// Flash error message and stop execution
// Can't stop execution by return or return false statement;
let message = "No more than " + this.maxNumber + " File is allowed";
throw new Error(message);
}
Pero estoy llamando a esta función desde la función de flujo principal como
handleFilesUpload() {
let files = document.getElementById("myFile").files;
this.validateMaxNumber(files.length);
}
En el ejemplo anterior, no puedo detener la ejecución a menos que arroje un nuevo error. Solo devolver o devolver falso solo funciona si está en la función principal de ejecución; de lo contrario, no funciona.
salida(); se puede usar para ir a la próxima validación.
Si está utilizando jquery. Esto debería evitar que la función brote hasta que la función principal que llama a esto también se detenga.
function myfunction(e)
{
e.stopImmediatePropagation();
................
}
stopImmediatePropagation()
no es una cosa de jQuery, y detener la propagación no es lo mismo que salir de una función.
escriba cualquier comando aleatorio que arroje un error, por ejemplo:
exit
o
die:-)
for
bucle. Incluso entonces, no tengo idea de por qué se usaría el método sugerido, cuando simplemente podría llamarbreak;
. Para usar el ejemplo del artículo: Elif(i==5) break;
usoreturn
detendrá la ejecución de la función, esté o no en unfor
bucle.return
detendrá la ejecución de la función, que parece ser lo que solicitó.