11

假设我有以下代码:

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()继续。

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

据我所知,这个问题相似但不相同。

您可以推荐任何链接以更好地理解 Javascript 执行,我们将不胜感激。

谢谢!

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

4

1 回答 1

11

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

如果完成时间超过一秒钟testAtestB则只需等待。

另外,你应该写setTimeout(testB, 1000)而不是setTimeout('testB()', 1000). 向 setTimeout 发送一个字符串,就像 using 一样eval通常被认为是邪恶的,会让你成为敌人;)

于 2011-02-01T09:51:44.493 回答