推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

JavaScript的单线程事件循环模型

更新时间:2026-06-20 14:10:47 大小:16K 上传用户:烟雨查看TA发布的资源 标签:javascript 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

一、核心概念:为什么JavaScript是单线程

JavaScript作为浏览器端的脚本语言,设计之初就确定了单线程的核心特性,这一设计是由它的应用场景决定的:JavaScript的主要用途是和用户交互、操作DOM,如果设计为多线程,就会带来复杂的线程同步问题——比如两个线程同时修改同一个DOM,一个删除、一个添加内容,浏览器无法判断应该以哪个线程的操作结果为准。因此从诞生起,JavaScript就一直保持单线程的设计,同一时间只能执行一段代码。

单线程并不代表单线程会阻塞进程,如果所有任务都排队等待执行,那么一旦前面的任务执行时间很长,后续任务就会一直卡顿,用户体验会极差。为了解决这个问题,JavaScript设计了事件循环模型(Event Loop,用来处理异步任务,实现不阻塞主线程的并发效果。

二、事件循环的基本组成

JavaScript的事件循环模型核心分为四个部分:调用栈(Call Stack)、任务队列(Task Queue)、宏任务(Macro Task)、微任务(Micro Task

1. 调用栈

调用栈是JavaScript的执行上下文栈,遵循**后进先出(LIFO**的规则,所有同步任务都会进入调用栈依次执行,当一个函数执行完成,就会从调用栈中弹出,直到调用栈被清空。

2. 任务队列

当遇到异步任务时,JavaScript并不会阻塞主线程等待异步结果返回,而是会把异步任务移交给浏览器内核的对应模块处理,当异步任务满足触发条件(比如定时器到时间、Ajax请求返回结果、用户点击事件触发),就会把对应的回调函数放入任务队列,等待主线程调用栈清空后,再取出执行。

任务队列并不是一个统一的队列,现代JavaScript规范把任务队列分为两类:宏任务队列微任务队列,不同类型的异步任务会进入不同的队列,执行优先级也有区别。


部分文件列表

文件名 大小
JavaScript的单线程事件循环模型.docx 16K

【关注公众号领20积分】

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载