Javascript 为什么window.location.reload需要setTimeout才能在firefox中工作

Javascript 为什么window.location.reload需要setTimeout才能在firefox中工作,javascript,jquery,firefox,Javascript,Jquery,Firefox,使用以下代码,它可以按预期工作,但延迟约为100毫秒 app.js function refresh(){ setTimeout(function(){window.location.reload();},0); } index.htlm <body onresize="refresh()"> <!-- dispay graph --> <body> 每次用户重新调整窗口大小时,图形都会相应地改变。在多个浏览器上测试,window.location

使用以下代码,它可以按预期工作,但延迟约为100毫秒

app.js

function refresh(){
 setTimeout(function(){window.location.reload();},0);
}
index.htlm

<body onresize="refresh()">
 <!-- dispay graph -->
<body>

每次用户重新调整窗口大小时,图形都会相应地改变。在多个浏览器上测试,window.location.reload()就足够了,但对于firefox来说,它需要通过setTimeout进行包装

读了又读,但我还是不明白为什么。我没有包装
窗口.位置.重新加载
内部
刷新
功能吗


另外,关于指向
窗口.location.reload
右侧
this
的问题,难道方法函数不足以将正确的
this
分配给窗口,因此它不需要由其他函数包装吗?

这是因为,显然,在Firefox中,上下文没有被保留。作为参考,您应该能够传递
window.location.reload.bind(window.location)
,而不是将调用包装到函数中…但我认为这看起来并不好。谢谢vlaz,您能否解释一下我们为什么需要执行
window.location.reload.bind(window.location)
?为什么
window.location.reload.bind()
不同于普通的
window.location.reload
?当您执行函数时,它会在其上下文中运行。使用
reload
函数,上下文是
location
对象(或者更明确地说是
window.location
)。上下文本质上就是函数中的
this
所指的内容-有些函数可能会忽略它(如果它们不使用
this
),或者如果它们有上下文类型的“附件”,那么它总是正确的。使用执行“附加”操作的
.bind
时,函数上下文是静态的,不能更改。Firefox显然没有对
窗口.location
函数执行此操作,因此您必须执行
.bind
或将其称为
location.reload
。最初我使用的是
location.reload
,后来我注意到它在Firefox中不起作用。我做了一些挖掘,人们建议使用
window.location.reload
,因为它可以在除netscape之外的多个平台上正常工作,这显然是因为在Firefox中,上下文没有被保留。作为参考,您应该能够传递
window.location.reload.bind(window.location)
,而不是将调用包装到函数中…但我认为这看起来并不好。谢谢vlaz,您能否解释一下我们为什么需要执行
window.location.reload.bind(window.location)
?为什么
window.location.reload.bind()
不同于普通的
window.location.reload
?当您执行函数时,它会在其上下文中运行。使用
reload
函数,上下文是
location
对象(或者更明确地说是
window.location
)。上下文本质上就是函数中的
this
所指的内容-有些函数可能会忽略它(如果它们不使用
this
),或者如果它们有上下文类型的“附件”,那么它总是正确的。使用执行“附加”操作的
.bind
时,函数上下文是静态的,不能更改。Firefox显然没有对
窗口.location
函数执行此操作,因此您必须执行
.bind
或将其称为
location.reload
。最初我使用的是
location.reload
,后来我注意到它在Firefox中不起作用。我做了一些挖掘,人们建议使用
window.location.reload
,因为它适用于除netscape以外的多个平台