¿Es posible detener la ejecución de JavaScript?
¿Es posible de alguna manera detener o finalizar JavaScript de manera que se impida que ocurra cualquier ejecución basada en JavaScript, sin recargar el navegador?
Estoy pensando en un equivalente en JavaScript de exit() en PHP.
Respuesta #1
Respuesta corta:
throw new Error("Something went badly wrong!");
Si quieres saber más, sigue leyendo.
¿Quieres detener la ejecución de JavaScript para desarrollar/depurar?
La expresión debugger; en tu código detendrá la ejecución de la página, y luego las herramientas de desarrollo de tu navegador te permitirán revisar el estado de tu página en el momento en que se congeló.
¿Quieres detener tu aplicación de manera arbitraria y por diseño?
¿En caso de error?
En lugar de tratar de detenerlo todo, deja que tu código maneje el error. Lee sobre Exceptions buscando en Google. Son una forma inteligente de permitir que tu código "salte" a procedimientos de manejo de errores sin usar tediosos bloques if/else.
Después de leer sobre ellos, si crees que interrumpir todo el código es absolutamente la única opción, lanzar una excepción que no va a ser 'capturada' en ningún lugar excepto en el 'ámbito' raíz de tu aplicación es la solución:
// creates a new exception type:
function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; }
FatalError.prototype = Object.create(Error.prototype);
// and then, use this to trigger the error:
throw new FatalError("Something went badly wrong!");
asegúrate de no tener bloques catch() que capturen cualquier excepción; en este caso, modifícalos para relanzar tu excepción "FatalError":
catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ }
¿Cuando una tarea se completa o ocurre un evento arbitrario?
return; finalizará el flujo de ejecución de la función actual.
if(someEventHappened) return; // Will prevent subsequent code from being executed
alert("This alert will never be shown.");
Nota: return; funciona solo dentro de una función.
En ambos casos...
...también puede que quieras saber cómo detener el código asincrónico. Se hace con clearTimeout y clearInterval. Finalmente, para detener las solicitudes XHR (Ajax), puedes usar el método xhrObj.abort() (que también está disponible en jQuery).
Respuesta #2
Puedes cometer un error tipográfico en JavaScript :D (pensando fuera de la caja aquí)
thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();
O algo así:
new new
Respuesta #3
Algo así podría funcionar:
function javascript_abort()
{
throw new Error('This is not an error. This is just to abort javascript');
}
Tomado de aquí:
http://vikku.info/codesnippets/javascript/forzar-javascript-para-abortar-detener-la-ejecución-de-javascript-en-cualquier-momento/
Respuesta #4
Sí, acepto
setTimeout(function() { debugger; }, 5000)
De esta manera tengo 5 segundos para interactuar con la interfaz y luego se detiene. La última vez que lo usé fue cuando necesitaba dejar visible una información sobre herramientas personalizada, para hacer algunos cambios de estilo.
Respuesta #5
No.
Incluso si lanzas una excepción, solo matará el bucle de eventos actual. Los callbacks pasados a setTimeout o a los manejadores de eventos de DOM/XMLHttpRequest seguirán ejecutándose cuando les llegue su momento.
Respuesta #6
Estoy usando
return false;si quiero abortar la ejecución de JavaScript más adelante.
Respuesta #7
Si estás en una función, puedes salir de ella usando return;, pero eso no detiene la ejecución de la función principal que llamó a esa función.
Respuesta #8
Puedes llamar a return temprano en una función, y al menos esa función dejará de ejecutarse. También puedes usar simplemente throw '' para causar un error y detener el proceso actual. Pero esto no detendrá todo. setTimeout y setInterval pueden crear funciones retrasadas y funciones que se ejecutan en un intervalo de tiempo, respectivamente. Esas seguirán ejecutándose. Los eventos de Javascript también continuarán funcionando como de costumbre.
