是否可以停止 JavaScript 执行?

IT技术 javascript
2021-02-04 00:35:57

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

我在想一个相当于exit()PHP的 JavaScript

6个回答

简答:

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

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


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

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

您想随意停止您的应用程序吗?

出错了?

与其试图停止一切,不如让您的代码处理错误。Exception通过谷歌搜索了解s。它们是一种让您的代码“跳转”到错误处理程序而不使用乏味的 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;仅在函数内有效。

在这两种情况下...

...您可能还想知道如何停止异步代码。它是用clearTimeout完成的clearInterval最后,要停止XHR ( Ajax ) 请求,您可以使用xhrObj.abort()方法(jQuery中也可用)。

@gattsbr 这不是仍然会立即执行下一行吗?
2021-03-17 00:35:57
如果您需要停止整个 JS 进程以进行调试,请使用 Webkit 中的开发人员工具或 Firefox 上的 Firebug 通过执行 来设置断点debugger;这将完全停止执行。
2021-03-23 00:35:57
+1 为debugger;声明。return外部函数会产生语法错误(只是为了让冲浪者清楚)。有很多方面需要考虑......我只是通过拥抱我不想被执行的部分而成功if (false) { ... }所以你不必关心嵌套的注释。
2021-04-05 00:35:57
@Derek 朕会功夫debugger非常适合在有大量异步内容发生时阻止页面加载,但如果可以摆脱半透明的灰色覆盖层并同时在页面中滚动,那就太好了。
2021-04-07 00:35:57
注意:所有剩余的异步函数如setTimeoutXMLHttpRequest仍将执行。目前没有完全终止 JavaScript 的标准方法。
2021-04-11 00:35:57

你可以打一个 JavaScript 错字 :D (在这里跳出框框思考)

thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();

或者类似的东西:

new new
我试图在异步 JS 中间拦截对象,该对象被包装到 catch-every-exception 和重定向中,没有任何选项来手动停止所有异步或更改捕获/重定向部分。写作abcd帮助:脚本编译但在这里出现“未定义”运行时错误!非常感谢,这应该是答案。
2021-03-14 00:35:57
从现在开始,我将在我写的所有东西中包含这个功能,让模因被创造出来!
2021-03-17 00:35:57
你应该得到一块饼干。
2021-03-22 00:35:57
先生,您真是个天才!:)
2021-03-23 00:35:57
这在使用 JavaScript 作为脚本语言时不太适用。正在运行的代理将其作为运行时错误捕获,并且在您将其更改为(存在的)函数调用或抛出错误之前不会前进。好主意,不过。此外,认为您可能应该将其放在驼峰式外壳中,因此如果您确实希望它继续存在,则不需要对其进行评论。像这样的事情,我认为:fakeFunctionThatEffectivelyStopsAllProcessingInJavaScript();谢谢。
2021-04-08 00:35:57

像这样的事情可能会奏效:

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/

那是 ECMA 标准的一部分还是浏览器扩展?
2021-03-20 00:35:57
你的意思是这个功能在js中已经存在了,还是必须要添加?如果是这样,您必须将它添加到您想要调用它的任何范围内。
2021-03-22 00:35:57
我是说Error对象。
2021-04-04 00:35:57
这可以告诉你比我知道的更多的信息:developer.mozilla.org/en-US/docs/JavaScript/Reference/...
2021-04-10 00:35:57

不。

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

在阅读您的帖子之前,我对超时进行了测试。它确认异常不会终止超时。jsfiddle.net/skibulk/wdxrtvus
2021-03-14 00:35:57
这很有趣,所以我们可以说每一个说“异常停止程序执行”的人都是错误的,相反,他们都应该说“异常停止当前事件循环条目的执行”。
2021-03-18 00:35:57
我们怎样才能防止这种情况发生?
2021-03-27 00:35:57
您可能会考虑这样做来清除超时和间隔:stackoverflow.com/a/8860203/6465140
2021-04-06 00:35:57

我做:

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

这样我有 5 秒钟的时间与 UI 交互,然后停止。上次我使用的时候是我需要让自定义工具提示可见,以进行一些样式更改。

仅供参考,chrome 开发工具允许您在此类场景的元素上切换“:hover”
2021-03-18 00:35:57
这是(几乎)唯一满足问题中“以某种方式阻止任何基于 JavaScript 的执行发生”子句的答案。但是,它缺少仅在开发人员控制台打开时才起作用的信息,不需要超时,并且可以手动恢复(这是暂停而不是停止)。
2021-03-21 00:35:57
这仍然不适用于 unload 和 onbefore 事件。请注意,除非您自己手动控制调试器,否则可能没有“简单”的全局解决方案。
2021-04-04 00:35:57
":hover" 是 css 的东西,例如,如果你用 mouseover() 显示工具提示,这没有帮助
2021-04-08 00:35:57