setTimeout如何在javascript中工作(理论上)

时间:2015-05-18 09:29:26

标签: javascript

为什么setTimeoutalert(2)之后被激活,即使我将时间设置为0.我认为javascript是同步语言。

我只是想从理论上知道javascript中的异步工作方式。当javascript interpreator遇到setTimeout时会发生什么,当遇到其他功能时会发生什么

修改:

setTimeout(function(){
alert(0)
},0)


alert(1)
alert(2)

2 个答案:

答案 0 :(得分:1)

JavaScript是单线程的。 JS将尝试尽可能接近提供给setTimeout函数的超时时间,但只有在线程不忙于其他事情时才会触发(例如,等待用户在警报弹出窗口中单击OK) 。

因此,如果您有一个需要很长时间才能运行的JS脚本,并且在其中有一些具有不同超时长度的超时,它们只能在JS线程完成该脚本中的其余代码时触发。

答案 1 :(得分:1)

JavaScript使用事件循环来执行代码。该循环从队列中获取事件并执行附加到它的代码。

在您当前的活动中,您致电setTimeout并在该队列中添加新活动。 setTimeout调用立即返回(函数不执行,只是放入队列中)。

然后继续执行当前代码,直到完成当前事件(我假设您对alert()的调用已在此处)。

当前事件结束后,循环从队列中选择下一个事件;这将是您使用setTimeout设置的功能。