为什么IE和FF中的输出不同?
在IE中显示: Hello 和在FF中显示: 您好
var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);
什么是标准?哪个浏览器做得对?
注意:如果我在FF中将10转换为11,那么它会显示 Hello
答案 0 :(得分:6)
Firefox以不同于IE的方式处理小延迟。 Firefox的最小延迟时间为10毫秒(这也不是确切的)。 有关详细信息,请参阅https://developer.mozilla.org/en/window.setTimeout的说明。
答案 1 :(得分:1)
在我的电脑上,我在FF和IE中都运行了它,而且我得到了相反的结果。
原因是你的超时只有10毫秒。 Windows上的Timers的分辨率实际上大约是10ms,因此可能首先发生超时。要确定一件事发生在另一件事之前,你应该在超时之间有更大的差距。
即便如此,你也不应该期望它始终有效: - )
如果您真的想以相同的顺序执行操作,请将其保存在同一行代码中,或设置标记,说明特定操作是否已完成,并在执行第二个依赖于第一
答案 2 :(得分:0)
浏览器无法保证计时器事件的执行顺序。它们由操作系统的本机计时器实现在内部处理,并且可能以不同的顺序触发。
由于你指定了这么短的时间,很可能就是这种情况。
答案 3 :(得分:0)
我清楚地掌握它。
你期望firefox做什么,例如:
虽然IE所做的是带来疑问的因素:
所以基本上我意识到消息变量在IE中具有全局范围,而firefox创建了最后传递给超时函数的值的缓存。 要实现这一点,请使用可能长达1000和更长的时间段。 10000(1& 10秒)而不是0& 10.这将告诉你firefox只显示警报两次,而IE只显示一次。