说我有以下代码:
function testA { setTimeout('testB()',1000); doLong(); } function testB { doSomething(); } function doLong() { //takes a few seconds to do something }
我执行testA().我已经看到Javascript是单线程的.当达到testB()的超时时,1000毫秒后会发生什么?
我可以想到的一些可能性:
> testB()排队等待doLong()执行,其他任何调用都完成.
> doLong()立即终止,并且testB()被启动.
> doLong()在停止(自动或提示用户之后)和testB()启动之前,稍等一段时间才能执行.
> doLong()暂停,testB()被启动.在testB()完成后,doLong()恢复.
什么是正确答案?是否依赖于实现或标准的一部分?
This question是相似但不一样的,据我所知.
任何链接,您可以推荐更好地了解Javascript执行将不胜感激.
谢谢!
*是的,我知道并不是所有的浏览器都遵循标准:(
解决方法
你的第一个猜测是正确的:
testB()排队等待doLong()执行,其他任何调用都已完成.
testB()排队等待doLong()执行,其他任何调用都已完成.
如果testA需要一秒钟以上才能完成,那么testB就只需要等待.
另外,你应该写setTimeout(testB,1000)而不是setTimeout(‘testB()’,1000).发送一个字符串到setTimeout是,像使用eval,generally considered evil,并将使你的敌人;)