0

我希望下面的代码只输出 0 或 2,但在 Firefox 24 中它有时会输出 1。这符合任何(未来)标准吗?我认为当超时事件被同步调用阻塞时,Firefox 会切换事件。我无法在 Chrome 30.0.1599.69 m 中重现它(我在打开网站时在控制台中输入了此代码。)

var z=0;
var x = new XMLHttpRequest();
x.onload=function(){
 console.log(z);
};
x.open('GET','.',true);//asynchronous call
x.send();
setTimeout(function(){
 var i=1e7;
 while(i--);//some time to waste while the asynchronous call finishes.
 var y = new XMLHttpRequest();
 y.open('GET','.',false);//synchronous call
 z=1;
 y.send();
 z=2;
},10);

有人知道演示此问题的较短代码吗?

4

1 回答 1

0

y.send()“同步”将旋转事件循环,但是它还应该在旋转时延迟该 DOM 窗口/文档的事件......

因此,这似乎是 XHR 实现/事件调度程序中的错误或实现中的“错误” console(实际上跨多个文档有点异步)。

无论如何,避免同步 XHR 的另一个原因是:有趣的重入行为。听起来你应该提交一个错误,如果你能重现这个(我不能)。

于 2013-10-21T11:29:20.487 回答