是否可以停止JavaScript的执行?

是否有可能以某种方式停止或终止JavaScript,以防止任何进一步的基于javascript的执行发生,而无需重新加载浏览器?

我正在考虑在PHP中等价于exit()的JavaScript。

656424 次浏览

如果你在一个函数中,你可以使用return;退出它,但这不会停止调用该函数的父函数的执行。

类似这样的方法可能有用:

function javascript_abort()
{
throw new Error('This is not an error. This is just to abort javascript');
}

从这里开始:

http://vikku.info/codesnippets/javascript/forcing-javascript-to-abort-stop-javascript-execution-at-any-time/

简短的回答:

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

如果你想知道更多,请继续阅读。


要停止JavaScript的执行以进行开发/调试吗?

代码中的表达式debugger;将暂停页面执行,然后浏览器的开发人员工具将允许您查看页面冻结时的状态。

您是否希望按照设计任意地停止应用程序?

错误吗?

不要试图停止所有事情,而是让您的代码处理错误。通过谷歌阅读Exceptions。它们是一种让代码“跳转”到错误处理过程的聪明方法,而无需使用繁琐的if/else块。

在阅读了它们之后,如果你认为中断整个代码绝对是唯一的选择,抛出一个除了应用程序的“根”作用域之外不会被“捕获”的异常是解决方案:

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

确保你没有__ABC0块捕获any异常;在这种情况下,修改它们以重新抛出"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;只在函数中起作用。

在这两种情况下……

...您可能还想知道如何停止异步代码。它是用clearTimeoutclearInterval完成的。最后,要停止XHR (Ajax < a href = " http://en.wikipedia.org/wiki/Ajax_%28programming%29 " > < / >)请求,可以使用xhrObj.abort()方法(这是可在jQuery以及)。

你可以在函数的早期调用return,至少该函数将停止运行。你也可以只使用throw ''来引起错误并停止当前进程。但这些并不能阻止一切。setTimeoutsetInterval可以分别创建延迟函数和在时间间隔上运行的函数。这些将继续运行。Javascript事件也将继续正常工作。

这个过程很乏味,但在Firefox中:

  1. 打开一个空白选项卡/窗口,为脚本创建一个新环境 从当前页面
  2. 用要执行的脚本填充新环境
  3. 在新环境中激活脚本
  4. 关闭(即消灭)新环境……

停止或终止JavaScript this[以]方式阻止[s]进一步 基于javascript的执行,无需重新加载浏览器

注:

  • 步骤4只停止该环境中JavaScript的执行,而不会停止任何其他窗口的脚本
  • 原来的页面不会被重新加载,但是一个新的选项卡/窗口会被脚本加载
  • 当一个选项卡/窗口关闭时,该环境中的所有东西都消失了:所有残留,部分结果,代码等。
  • 结果必须迁移回父窗口或另一个窗口进行保存
  • 要重新运行代码,必须重复上述步骤

其他浏览器具有并使用不同的约定。

不。

即使抛出异常,也只会终止当前的事件循环。传递给setTimeout或DOM/XMLHttpRequest事件处理程序的回调在时间到来时仍将运行。

在JavaScript函数中定义一个变量,如果你想执行这个函数,将这个变量设置为1,如果你想停止它,将它设置为0

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

我在用

return false;

如果我想中止JavaScript从进一步向下运行。

你可以做一个JavaScript错别字:D(跳出框框思考)

thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();

或者像这样:

new new

我知道这很老了,但我想这么做,我发现了,在我看来,一个稍微改进的投掷答案的解。只是暂时抑制错误消息,然后使用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');

我做的事:

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

这样我就有5秒钟的时间与UI交互,然后停止。最后一次我使用的是当我需要离开自定义工具提示可见,做一些样式变化。