说我有以下代码:
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执行的链接。
谢谢!
*是的,我知道并非所有浏览器都遵循标准:(
答案 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就像使用eval
,generally considered evil一样,会让你成为敌人;)