假设我有以下代码:
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执行,将不胜感激。
谢谢!
* 是的,我知道不是所有浏览器都遵循标准 :(
setTimeout(function() { testB(); }, 1000);
是最好的方法,但是我被误导了吗? - Shadow The Spring Wizardvar f = function() { testB(); }; setTimeout(f, 1000);
。仍然具有相同的含义,但现在你可以看到冗余性。 - Jakob