Javascript 是否只有firefox在阻塞同步XMLHttpRequest上切换事件?未来是什么?
我期望下面的代码只输出0或2,但在Firefox24中,它有时输出1。这是否符合任何(未来)标准?我认为Firefox会在超时事件被同步调用阻止时切换事件。我无法在Chrome 30.0.1599.69 m中复制它(我在打开网站时在控制台中输入了此代码) 有人知道演示此问题的较短代码吗?Javascript 是否只有firefox在阻塞同步XMLHttpRequest上切换事件?未来是什么?,javascript,firefox,standards,Javascript,Firefox,Standards,我期望下面的代码只输出0或2,但在Firefox24中,它有时输出1。这是否符合任何(未来)标准?我认为Firefox会在超时事件被同步调用阻止时切换事件。我无法在Chrome 30.0.1599.69 m中复制它(我在打开网站时在控制台中输入了此代码) 有人知道演示此问题的较短代码吗?y.send()是“同步的”将使事件循环旋转,但旋转时也应如此 因此,这可能是XHR实现/事件调度器中的一个bug,也可能是控制台中的一个“bug”(实际上,多个文档之间有些异步) 无论如何,避免同步XHR的另一
y.send()
是“同步的”将使事件循环旋转,但旋转时也应如此
因此,这可能是XHR实现/事件调度器中的一个bug,也可能是控制台中的一个“bug”(实际上,多个文档之间有些异步)
无论如何,避免同步XHR的另一个原因是:有趣的重入行为。如果你能复制这个(我不能),听起来你应该这样做。奇怪的是,你不能复制它。我复制了上面的代码,在Firefox24的OpenStackOverflow页面下打开firebug控制台,粘贴代码,每次按Run1后都返回。实际上我现在可以复制了。我之前尝试过另一个领域,并使用了Nightly,它似乎有不同的时间或其他什么。不过,这似乎仍然是一个bug。或者至少是“未定义的行为”,所以我的建议是归档一个bug。
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);