使用setTimeout()的Javascript执行顺序

时间:2011-02-01 09:48:55

标签: javascript execution multiple-browsers

说我有以下代码:

function testA {
   setTimeout('testB()', 1000);
   doLong();
}

function testB {
   doSomething();
}

function doLong() {
   //takes a few seconds to do something
}

我执行testA()。我已经读过Javascript是单线程的。 1000毫秒后,当达到testB()的超时时会发生什么?

我能想到的一些可能性:

  • testB()排队等候doLong()后执行,其他任何调用都已完成。
  • doLong()会立即终止并启动testB()
  • doLong()在停止之前(自动或在提示用户之后)执行时间稍长,并且testB()已启动。
  • doLong()已暂停,testB()已启动。 testB()完成后,doLong()会恢复。

答案是正确的?它是依赖于实现还是标准的一部分?*

就我所知,

This question相似但不一样。

您可以推荐任何可以更好地理解Javascript执行的链接。

谢谢!

*是的,我知道并非所有浏览器都遵循标准:(

1 个答案:

答案 0 :(得分:10)

你猜测的第一个是正确的: testB() is queued up to execute after doLong() and anything else it called have finished.

如果testA完成需要的时间超过一秒,testB只需要等待。

此外,您应该写setTimeout(testB, 1000)而不是setTimeout('testB()', 1000)。将字符串发送到setTimeout就像使用evalgenerally considered evil一样,会让你成为敌人;)