单线程
JavaScript是一种单线程的编程语言,同一时间只能做一件事,所有任务都需要排队依次完成。
为什么JS不能有多个线程吗?
JS作为浏览器脚本语言,主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会来很复杂问题。
事件循环
- 事件循环就是一个执行消息队列的机制。
为什么会出现事件循环?
因为浏览器的渲染主线程是单线程,而为了避免主线程出现阻塞的情况,采用了异步的形式执行,为了解决异步任务的问题,最终采用事件循环这种执行消息队列的机制。
宏任务与微任务
宏任务:script、setTimeout、setInterval、setImmediate、I/O、UI交互事件
微任务:promise、nextTick
若同时存在promise和nextTick,先执行nextTick。
在同一次循环中,微任务比宏任务优先执行,任务按照推入队列的顺序执行(FIFO)