是否可以停止JavaScript执行?

时间:2012-02-15 18:09:37

标签: javascript

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

我在思考PHP中的exit()等效JavaScript。

11 个答案:

答案 0 :(得分:461)

简短回答:

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

如果您想了解更多信息,请继续阅读。


您是否要停止JavaScript的开发/调试执行?

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

您是否想要按照设计任意停止您的应用程序?

出错?

不要试图阻止所有内容,而是让代码处理错误。通过谷歌搜索了解Exception。它们是一种智能的方法,可让您的代码“跳转”到错误处理过程,而无需使用繁琐的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!");

请确保您没有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;仅适用于函数。

在这两种情况下......

...您可能想知道如何停止异步代码。完成了clearTimeoutclearInterval。最后,要停止XHR Ajax )请求,您可以使用xhrObj.abort()方法(jQuery中提供的 )。

答案 1 :(得分:103)

你可以写一个JavaScript拼写错误:D(在这里开箱即用)

thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();

或类似的东西:

new new

答案 2 :(得分:29)

这样的事可能有用:

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/

答案 3 :(得分:23)

没有

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

答案 4 :(得分:15)

我做:

setTimeout(function() { debugger; }, 5000)
这样,我有5秒的时间与UI进行交互,然后停止。我使用的Las时间是当我需要保持自定义工具提示可见时,做一些样式更改。

答案 5 :(得分:11)

我正在使用

return false;

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

答案 6 :(得分:9)

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

答案 7 :(得分:8)

你可以在函数的早期调用return,至少该函数将停止运行。您也可以使用throw ''导致错误并停止当前进程。但这些并不能阻止一切。 setTimeoutsetInterval可以分别生成在一个时间间隔内运行的延迟函数和函数。那些将继续运行。 Javascript事件也将继续照常工作。

答案 8 :(得分:1)

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

  1. 打开一个空白标签/窗口,为脚本创建新环境 来自当前页面
  2. 使用要执行的脚本填充新环境
  3. 在新环境中激活脚本
  4. 关闭(即杀死)新环境......
  5.   

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

    注意:

    • 步骤4仅停止在该环境中执行JavaScript而不停止任何其他窗口的脚本
    • 未重新加载原始页面,但使用脚本
    • 加载了新的选项卡/窗口
    • 当标签/窗口关闭时,该环境中的所有内容都消失了:所有残余,部分结果,代码等。
    • 结果必须迁移回父级或其他窗口进行保存
    • 要重新运行代码,必须重复上述步骤

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

答案 9 :(得分:1)

在JavaScript函数中定义一个变量,如果你想要执行该函数,请将此变量设置为1,如果要停止它,则将其设置为0

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

答案 10 :(得分:0)

我知道这已经过时了,但我想这样做,在我看来,我发现了一个略微改进的投掷答案解决方案。只是暂时阻止错误消息并稍后使用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');