JS是单线程的,有一个执行栈,和任务队列。
Js的代码有同步任务和异步任务,同步任务直接在执行栈中执行,而异步任务在有了结果之后,会被放到任务队列中,等到执行栈中为空时,会去执行任务队列中的异步任务。
异步任务 分为 宏任务和微任务,微任务会被放到微任务队列中,并且每执行完一个宏任务,就要将微任务队列清空(执行完微任务队列中所有微任务)。
宏任务
:
![setTimeout、setInte、、](https://i-blog.csdnimg.cn/blog_migrate/44a16fe60cb691c723e28acb6a693c39.png)
主函数块也是宏任务。
requestAnimationFrame:下次页面重绘前所执行的操作,而重绘也是作为宏任务的一个步骤来存在的,且该步骤晚于微任务的执行
微任务:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8ab870f7cdf022496ae7bf9cf304ce1c.png)