Bri*_*ett 10 javascript execution multiple-browsers
假设我有以下代码:
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
Run Code Online (Sandbox Code Playgroud)
我执行testA().我已经读过Javascript是单线程的.testB()达到超时后1000毫秒后会发生什么?
我能想到的一些可能性:
testB()排队等待执行后doLong(),它调用的任何其他内容都已完成.doLong()立即终止并testB()启动.doLong()在被停止之前(自动地或在提示用户之后)被执行并且testB()被启动的时间稍长.doLong()暂停,testB()开始.后testB()已完成,doLong()重新开始.什么是正确的答案?它是依赖于实现还是标准的一部分?*
就我所知,这个问题类似但不一样.
您可以推荐任何可以更好地理解Javascript执行的链接,我们将不胜感激.
谢谢!
*是的,我知道并非所有浏览器都遵循标准:(
Jak*_*kob 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,通常被视为邪恶并会让你成为敌人;)