gpt4 book ai didi

javascript - JavaScript的执行流程可以中断吗?

转载 作者:行者123 更新时间:2023-12-03 12:20:16 26 4
gpt4 key购买 nike

我一直认为,由于JavaScript是单线程的,因此我可以附加事件处理程序,而不必担心在执行代码的过程中处理程序将被执行。令我惊讶的是,我发现它们可以。根据this answer,的介绍,“无响应脚本”对话框会导致在脚本仍在运行时引发事件。

我使用以下代码对此进行了测试:

<script>
function loop() {
var cond;
onblur = function (event) {
cond = false;
};
cond = true;
while (cond)
;
alert('loop exited!');
}
</script>
<button onclick="loop()">loop()</button>

(jsFiddle)

在Firefox 11.0中,该函数在单击“继续”后打印“退出循环”。循环似乎已暂停,允许执行事件。这类似于 Unix signal,,它会临时更改目标线程的上下文。但这更加危险,因为它允许更改外部状态。

这是一个错误吗?我是否应该不再依赖JavaScript的单执行流模型并确保我的所有脚本都是可重入的?还是尽管主要的浏览器允许发生这种缺陷,但还是不值得追求的缺陷?

最佳答案

是的,如果您创建一个无限循环,则会挂起您的JavaScript。差异浏览器将对此进行不同的处理。对我来说,Firefox 11会弹出一个窗口,说明您的脚本已挂起。 Chrome目前正为我旋转。

这应该证明这一点。请勿在FF11或Chrome 17中调用alert()

while(true){}
alert("sucks");

http://jsfiddle.net/JCKRt/1/

您问有关JavaScript中的同步语句。还有其他一些同步语句会阻塞JavaScript的执行,例如 alert()confirm(),同步ajax调用等。

通常,您希望避免JavaScript中出现任何形式的同步内容!如果您希望事情暂停,则可能需要重新考虑设计。 JavaScript是事件驱动的。您不需要它在while循环中旋转,因为 上的任何内容都不会起作用,包括任何事件,例如单击等。

关于javascript - JavaScript的执行流程可以中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com