js的事件循环
事件循环(EventLoop)
js是一种单线程的语言,事件循环是为了解决js单线程不会阻塞的一种机制。
由三个部分来工作:
- 调用栈。存放任务,等待着主线程来执行,执行完就弹出,后进先出。
- 宏任务队列。存放宏任务,遵循先进先出。
- 微任务队列。存放微任务,遵循先进先出。
宏任务:script全部代码、setInterval、setTimeout、setImmediate
微任务:Process.nexTick、Promise、MutationObserver
工作原理
- 所有任务会被放在调用栈里等待主线程来执行
- js分为同步任务和异步任务,同步任务会按顺序进入调用栈等待主线程依次执行,异步任务会等待到其执行时,将注册的回调函数压入任务队列,等待主线程空闲(调用栈被清空)以及此任务满足条件,此任务被读取进入调用栈,然后等待被执行。
- 每次主线程空闲时,会去检查微任务队列,如果有微任务,则一次将微任务队列里的所有微任务执行完
- 每次主线程空闲、微任务空闲时,会去检查宏任务队列,先执行一个宏任务,再检查微任务队列是否有微任务,有则一次执行完微任务队列的微任务,没有则执行下一个宏任务,如此反复,直到宏任务队列被清空。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现