是否有可能停止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代码。 这是用clearTimeout
和clearInterval
。 最后,要停止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'); }
采取从这里:
没有。
即使你抛出一个exception,它只会杀死当前的事件循环。 传递给setTimeout或DOM / XMLHttpRequest事件处理程序的callback函数将在他们的时间到来时继续运行。
如果你在一个函数中,你可以使用return;
来退出它return;
但是这并不会停止调用该函数的父函数的执行。
您可以尽早在函数中调用return
,至less该函数将停止运行。 您也可以使用throw ''
来导致错误并停止当前进程。 但是这些都不会阻止一切。 setTimeout
和setInterval
可以分别在时间间隔上执行延迟的函数和函数。 那些将继续运行。 JavaScript事件也将继续照常运作。
我在用
return false;
如果我想从JavaScript进一步向下运行中止。
我做:
setTimeout(function() { debugger; }, 5000)
这样我有5秒钟与UI交互,然后停下来。 拉斯维加斯时间,我需要离开自定义工具提示可见,做一些样式的变化。
这个过程是乏味的,但在Firefox中:
- 打开一个空白选项卡/窗口,从当前页面为脚本创build一个新的环境
- 用该脚本填充新的环境来执行
- 在新环境中激活脚本
- 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');