js是单线程脚本语言,所有任务都要排队,只有前一个任务结束了,才会去执行下一个任务,为了协调事件所以就引入了Event Loop;
Event Loop分为同步任务和异步任务,同步任务(包括整体代码script)直接进入执行栈中执行,异步任务分为微任务队列和宏任务队列
微任务只有等同步任务全部执行完之后才会调入执行栈中执行,一般常见的微任务有Promise。then,process.nextTick
而宏任务只有等微任务队列清空之后才会调入执行栈中执行,一般常见的宏任务有setTimeout,setInterval
js为啥被设计为单线程?
js主要用途是操作dom与用户交互,假如js是多线程,此时有两个线程同时操作一个dom,一个线程要在这个dom上新增内容,一个线程要把这个dom删除,此时就会造成冲突。