我一直在阅读这篇文章http://ejohn.org/blog/how-javascript-timers-work/,学习有关
请注意,我在这里讨论的不是它的回调执行;相反,我正在尝试理解
类似于这个问题,为什么浏览器可以在用户单击时执行后台循环,同时接受新的点击注册?
如果你说浏览器维护不同的线程来处理不同的事情,那么我们能否称JS在浏览器中是单线程的?
setTimeout
、setInterval
和其他异步任务,如按钮单击。我知道JS是单线程的,这意味着回调函数(也称为事件处理程序)将按顺序排队执行。但是,看看下面这张图片,它是我从上面链接的文章中截取的:
setTimeout()
开始使用单独的线程在内部计算时间并触发其完成事件,这是因为吗?请注意,我在这里讨论的不是它的回调执行;相反,我正在尝试理解
setTimeout
如何计算时间并触发其完成。我知道它的回调将在给定的时间参数之前或稍后被调用,但这是因为当运行时发现有任何要执行的内容时,其回调被排队到以后的时间。类似于这个问题,为什么浏览器可以在用户单击时执行后台循环,同时接受新的点击注册?
如果你说浏览器维护不同的线程来处理不同的事情,那么我们能否称JS在浏览器中是单线程的?