什么时候Javascript执行停止?

时间:2015-05-04 07:23:01

标签: javascript

导航到新的html页面后,浏览器中的Javascript执行何时停止?

之后的行
window.location = "index.html";

还在执行吗?包含此行的函数是否返回?当有一个XMLHttpRequest运行时,是否仍会在带有回调代码的页面被调用之后调用onreadystatechange回调?还是setTimeout调用的回调?这个定义得很好吗?

1 个答案:

答案 0 :(得分:2)

导航到新页面时,现有页面将完全关闭。 Javascript上下文被停止并丢弃。在几行代码之后,在一堆代码行完全可变之后,这种关闭是否立即发生。在启动新页面加载时,它可能与某些异步时序有关。

多年来,一些浏览器在设置新位置后处理下几行代码的方式略有不同,但在设置新位置后,您不应指望执行任何行,因为设置新位置是告诉浏览器关闭此页面并开始加载新页面。

Chrome中的快速测试显示,下一行的alert()会在完成加载下一个位置之前执行并等待用户输入,但这是未记录的行为,并且不值得信赖。< / p>

在Firefox中,警报会在屏幕上短暂闪烁,但不会等待用户输入并加载新页面。

智能的代码方法是在设置window.location后不放置任何代码。这样,您就不会依赖于浏览器之间不同的行为,并且所有浏览器的行为都与您的代码相同。如果您想执行其他操作,请在更改window.location之前执行此操作。或者,如果您希望当前的代码块完成执行,请更改setTimeout()中的位置,如下所示:

setTimeout(function() {
    window.location = "http://www.stackoverflow.com";
}, 1);

这样可以在页面更改为新位置之前可靠地让当前执行线程完成,因为setTimeout()通过事件队列工作,并且直到当前执行线程之后才会处理它的事件完成(无论完成多长时间)。