这是依赖于浏览器的JavaScript代码吗?

时间:2010-07-28 06:23:25

标签: javascript

为什么IE和FF中的输出不同?
在IE中显示: Hello 和在FF中显示: 您好

var message = "Hi";
setTimeout(function(){alert(message);},10);
setTimeout(function(){message = "Hello";},0);

什么是标准?哪个浏览器做得对?

注意:如果我在FF中将10转换为11,那么它会显示 Hello

4 个答案:

答案 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做什么,例如:

  • 设置1/100后的第一条消息 第二个&缓存消息值。
  • 立即显示第二条消息。
  • 显示第一条消息{if 100 secs 过}。

虽然IE所做的是带来疑问的因素:

  • 在1/100之后设置消息 一秒钟。
  • 将邮件设置为新值,忽略新的超时。
  • 显示消息{if 1/100 秒过来。

所以基本上我意识到消息变量在IE中具有全局范围,而firefox创建了最后传递给超时函数的值的缓存。 要实现这一点,请使用可能长达1000和更长的时间段。 10000(1& 10秒)而不是0& 10.这将告诉你firefox只显示警报两次,而IE只显示一次。