假设我有以下代码:
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()
继续。
正确答案是什么?它是依赖于实现还是标准的一部分?*
这个问题 https://stackoverflow.com/questions/4340211/javascript-execution-queue-and-settimeout据我所知,相似但不一样。
如果您能推荐任何有助于更好地理解 Javascript 执行的链接,我们将不胜感激。
Thanks!
*是的,我知道并非所有浏览器都遵循标准:(
你的第一个猜测是正确的: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
, 一般认为是邪恶的 https://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea会让你成为敌人;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)