js中的事件循环

事件循环

异步:某些函数不会立即执行,需要等到某个时机成熟后才会执行,该函数叫做异步函数。

浏览器线程:

  1. JS执行引擎:负责执行JS代码
  2. 渲染线程:负责渲染页面
  3. 计时器线程:负责计时
  4. 事件监听线程:负责监听事件
  5. http网络线程:负责网络通信

事件队列:一块内存空间,用于存放执行时机到达的异步函数。当JS引擎空闲(执行栈没有可执行的上下文),他会从事件队列中拿出第一个函数执行。

事件循环:event loop,是指函数在执行栈、宿主线程、事件队列中的循环移动。

在这里插入图片描述

先执行执行栈里面的代码,发现定时器,事件监听等,会放到宿主环境中。待定时器倒计时结束,或事件监听触发,会把事件放入到事件队列中等待。等到执行栈里面的代码执行完毕。按照先进来的顺序,执行事件队列里面的事件。

总结:
浏览器的事件循环:执行js代码的时候,遇见同步任务,直接推入调用栈中执行,遇到异步任务,将该任务挂起,等到异步任务有返回之后推入到任务队列中,当调用栈中的所有同步任务全部执行完成,将任务队列中的任务按顺序一个一个的推入并执行,重复执行这一系列的行为。

异步任务又分为宏任务和微任务。
宏任务:任务队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列。
微任务:等宏任务中的主要功能都完成后,渲染引擎不急着去执行下一个宏任务,而是执行当前宏任务中的微任务
宏任务包含:执行script标签内部代码、setTimeout/setInterval、ajax请、postMessageMessageChannel、setImmediate,I/O(Node.js)
微任务包含:Promise、MutonObserver、Object.observe、process.nextTick(Node.js

猜你喜欢

转载自blog.csdn.net/weixin_44247866/article/details/127641764