主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数.

js是单线程语言,他的异步和多线程实现,是通过event loop事件循环机制来实现的。
大体由下面这三部分组成:
开始时会从全局代码开始一行一行执行,遇到函数调用会把它压入调用栈中,执行后函数会弹出;
而js中的异步操作,如....等;在执行后,里面的回调函数会入队到消息队列(任务队列)中,成为消息;消息会在调用栈清空的时候执行;
而使用promise的异步操作,会加入
微任务队列
中,它会在调用栈被清空的时候立即执行;并且处理期间,新加入的微任务也会一同执行
执行机制

js是一个单线程,同一时间只能做一件事情,碰到有些事情耗时间特别长,但是不能一直耗在那里(异步),所以先做别的事情。
宏任务:script(整体代码),setimeout,setInterval,I/O,requestAnimationFrame,UI rendering
微任务:promise

微任务一直跟在当前宏任务的后面

深入理解JavaScript事件循环机制

相关文章: