js事件队列

1.js的执行是单线程的。

2.而当它遇到了window的setTimeout和setInterval这样的异步任务,js都默默地先不执行这些回调,而是继续向下执行其他js脚本,等到所有js脚本都解析执行完了,再执行回调。

3.那么有多个回调的时候执行顺序是怎么样的呢?

浏览器是多线程的,js执行线程只是它多个线程中的一个。

当js的执行线程看到了setTimeout,浏览器马上会调用其他线程把这个函数中的回调扔到浏览器的事件队列中,事件队列是先入先出的队列。

那么在js执行线程执行完所有脚本空闲的时候,事件队列中的事件回调,会一个一个被拿出来执行。

浏览器有一个内部大消息循环Event Loop(事件循环),会轮询事件队列并处理事件。

相关文章