JavaScript事件循环的理解
JavaScript是单线程的,就是说在程序运行时同一时间只能做同一件事。这种设计会产生运行阻塞问题,如果说上一件事没做完,那么后面的事就都只能等着,为了解决这种问题的存在,就提出了一种运行机制-事件循环(Event Loop)
事件循环(Event Loop)
在JavaScript中,所有的任务都可以分为两种:
-
同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
-
异步任务:异步执行的任务,比如ajax网络请求,setTimeout定时函数等
同步任务与异步任务的运行流程图如下:
根据上面这张图可以看出,首先任务进入执行栈,然后区分同步任务和异步任务,如果是同步任务就进入主线程开始执行,异步任务就会进入右边的任务队列等待,然后当主线程内的任务执行完毕后就去任务队列中读取对应的任务,推入主线程执行。 这个过程不断的重复就是事件循环。
备注:异步任务还会细分宏任务与微任务,具体可以参考这篇文章宏任务和微任务的理解