是否有可能停止JavaScript的执行?

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

我正在考虑PHP中等效的exit()

简短的回答:

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

如果你想了解更多,请继续阅读。


你想停止JavaScript的执行开发/debugging?

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

你想要停止你的应用程序任意和devise?

错误?

而不是试图阻止一切,让你的代码处理错误。 通过Googlesearch了解Exception 。 他们是一个聪明的方式,让您的代码跳转到error handling程序,而不使用繁琐的if / else块。

在阅读完这些代码之后,如果您确信中断整个代码绝对是唯一的select,那么抛出一个除了在应用程序的“根”范围之外的任何地方都不会被“捕获”的exception就是解决scheme:

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

确保你没有捕获任何exception的catch()块; 在这种情况下修改它们以重新抛出"FatalError"exception

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

当一个任务完成或任意事件发生?

return; 将终止当前函数的执行stream程。

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

注意: return; 只在一个函数内工作。

在这两种情况下…

…您可能想知道如何停止asynchronous代码。 这是用clearTimeoutclearInterval 。 最后,要停止XHR ( Ajax )请求,可以使用xhrObj.abort()方法( 也可以在jQuery中使用 )。

你可以做一个JavaScript的错字:D(在这里考虑)

 thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario(); 

或者类似的东西:

 new new 

像这样的东西可能会工作:

 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/

没有。

即使你抛出一个exception,它只会杀死当前的事件循环。 传递给setTimeout或DOM / XMLHttpRequest事件处理程序的callback函数将在他们的时间到来时继续运行。

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

您可以尽早在函数中调用return ,至less该函数将停止运行。 您也可以使用throw ''来导致错误并停止当前进程。 但是这些都不会阻止一切。 setTimeoutsetInterval可以分别在时间间隔上执行延迟的函数和函数。 那些将继续运行。 JavaScript事件也将继续照常运作。

我在用

return false;

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

我做:

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

这样我有5秒钟与UI交互,然后停下来。 拉斯维加斯时间,我需要离开自定义工具提示可见,做一些样式的变化。

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

  1. 打开一个空白选项卡/窗口,从当前页面为脚本创build一个新的环境
  2. 用该脚本填充新的环境来执行
  3. 在新环境中激活脚本
  4. closures(即杀死)新的环境…

停止或终止JavaScript这[一种]的方式,以防止任何进一步的基于JavaScript的执行发生,而无需重新加载浏览器

笔记:

  • 步骤4仅停止在该环境中执行JavaScript而不执行任何其他窗口的脚本
  • 原始页面没有被重新加载,但是新的标签页/窗口被加载了脚本
  • 当一个标签/窗口closures时,该环境中的所有内容都消失了:所有的残留,部分结果,代码等等。
  • 结果必须迁移回父或另一个窗口保存
  • 要重新运行代码,必须重复上述步骤

其他浏览器有不同的惯例。

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

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

我知道这是旧的,但我想这样做,我发现,在我看来,抛出的答案略有改进的解决scheme。 只需临时禁用错误消息,稍后使用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');