参考博客:
深入理解javascript中的事件循环event-loop
JavaScript 引擎有多个线程,单个脚本只能在一个线程上运行(称为主线程)。
任务队列中存储异步任务(通常是回调函数)
JavaScript引擎在同步任务执行完后循环检查任务队列中的异步任务满足条件后加入主线程,叫做事件循环
异步过程:
主线程发起一个异步请求
异步任务接收请求并告知主线程已收到(异步函数返回)
主线程可以继续执行后面的代码,同时异步操作开始执行;
执行完成后通知主线程;
主线程收到通知后,执行一定的动作(调用回调函数)
事件循环详细步骤
1、主线程执行所有同步任务形成一个执行栈
2、主线程之外,还存在一个"消息队列"。只要异步操作执行完成,它的回调函数就到消息队列中排队
3、一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取消息队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行
4、主线程不断重复上面的第三步