Можно ли остановить выполнение JavaScript?

Возможно ли каким-либо образом остановить или прекратить JavaScript таким образом, чтобы предотвратить дальнейшее выполнение на основе JavaScript, без перезагрузки браузера?

Я думаю о эквиваленте JavaScript exit() в PHP.

Ответ 1

Короткий ответ:

throw new Error("Something went badly wrong!");

Если вы хотите узнать больше, продолжайте читать.


Вы хотите остановить выполнение JavaScript для разработки/отладки?

Выражение debugger; в вашем коде остановит выполнение страницы, а затем ваши инструменты разработчика браузера позволят вам просмотреть состояние вашей страницы в момент ее замораживания.

Вы хотите остановить приложение произвольно и по дизайну?

Ошибка?

Вместо того, чтобы пытаться остановить все, пусть ваш код обрабатывает ошибку. Читайте о Exception по googling. Это умный способ позволить вашему коду "перейти" к процедурам обработки ошибок, не используя утомительные блоки if/else.

После прочтения о них, если вы считаете, что прерывание всего кода является абсолютно единственным вариантом, бросание исключения, которое не будет "поймано" в любом месте, кроме области применения "root", является решением:

// 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!");

убедитесь, что у вас нет блоков catch(), которые улавливают любое исключение; в этом случае измените их, чтобы сбросить исключение "FatalError":

catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ }

Когда задача завершается или происходит какое-либо событие?

return; завершает текущий поток выполнения функции.

if(someEventHappened) return; // Will prevent subsequent code from being executed
alert("This alert will never be shown.");

Примечание: return; работает только внутри функции.

В обоих случаях...

... вы можете также знать, как остановить асинхронный код. Это делается с помощью clearTimeout и clearInterval. Наконец, чтобы остановить запросы XHR (Ajax), вы можете использовать метод xhrObj.abort() (который также можно найти в jQuery.

Ответ 2

Вы можете сделать опечатку JavaScript: D (мышление вне поля здесь)

thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();

Или что-то вроде:

new new

Ответ 4

Нет.

Даже если вы создадите исключение, он только убьет текущий цикл событий. Обратные вызовы, переданные обработчикам событий setTimeout или DOM/XMLHttpRequest, по-прежнему будут выполняться, когда придет время.

Ответ 5

Я делаю:

setTimeout(function() { debugger; }, 5000)

Таким образом у меня есть 5 секунд для взаимодействия с пользовательским интерфейсом, а затем в остановках. Время, которое я использовал, было тогда, когда мне нужно было оставить пользовательскую всплывающую подсказку видимой, чтобы сделать некоторые изменения стиля.

Ответ 6

Если у вас есть функция, вы можете выйти из нее с помощью return;, но это не остановит выполнение родительской функции, которая вызвала эту функцию.

Ответ 7

Вы можете вызвать return в начале функции, и по крайней мере эта функция перестанет работать. Вы также можете просто использовать throw '', чтобы вызвать ошибку и остановить текущий процесс. Но это не остановит все. setTimeout и setInterval могут выполнять отложенные функции и функции, выполняемые на временном интервале, соответственно. Они будут продолжать работать. События Javascript также будут работать как обычно.

Ответ 8

Я использую

return false;

если я хочу прервать работу JavaScript далее вниз.

Ответ 9

Процесс утомительный, но в Firefox:

  • Откройте пустую вкладку/окно, чтобы создать новую среду для script с текущей страницы
  • Заполните эту новую среду с помощью script для выполнения
  • Активируйте script в новой среде
  • Закрыть (то есть убить) эту новую среду для...

остановить или прервать JavaScript, чтобы [[]] [[]] предотвратить [s] дальнейшее Выполнение на основе JavaScript из-за отсутствия, без перезагрузки браузера.

Примечания:

  • Шаг 4 только останавливает выполнение JavaScript в этой среде, а не скрипты любых других окон
  • Исходная страница не перезагружается, но новая вкладка/окно загружается с помощью script
  • Когда закрывается вкладка/окно, все в этой среде отсутствует: все остатки, частичные результаты, код и т.д.
  • Результаты должны вернуться к родительскому или другому окну для сохранения
  • Для повторного запуска кода вышеуказанные шаги необходимо повторить

Другие браузеры имеют и используют разные соглашения.

Ответ 10

Определите переменную внутри функции JavaScript, установите для этой переменной значение 1, если вы хотите выполнить функцию и установить ее в 0, если вы хотите ее остановить.

var execute;
function do_something()
{
if (execute == 1)
{
// execute your function
}
else
{
 // do nothing
}
}

Ответ 11

Я знаю, что это старо, но я хотел сделать это, и я нашел, на мой взгляд, несколько улучшенное решение ответов на бросок. Просто временно отключите сообщения об ошибках и повторно активируйте их позже, используя setTimeout:

setTimeout(function() {
    window.onerror = function(message, url, lineNumber) {  
        return false;
    };
}, 50); // sets a slight delay and then restores normal error reporting
window.onerror = function(message, url, lineNumber) {  
    return true;
};
throw new Error('controlledError');