- javascript是单线程的,也就是只有一个调用栈,调用栈按照先入后出的规则进行一次调用一个而且可以嵌套。在执行调用栈的时候会先执行同步任务,调用栈在发现一步任务的时候会把异步任务放入任务队列里(异步任务队列分为宏任务队列和微任务队列)队列都按照先入先出原则。
- 宏任务:全局script标签 事件的回调函数 setTimeout() setInterval()
- 微任务:Promise.then().catch().finally()
- 事件循环 就是在调用栈清空以后(同步任务执行完以后)会去任务队列里面读取异步任务进入执行栈,在每一次读取新的宏任务之前先会执行微任务队列的任务把微任务队列的任务清空以后才会去执行宏任务。