一、事件循环(event loop)
- 函数在每次执行时,都会产生一个执行环境
- 执行环境负责存储函数执行时产生的一切数据
- 问题:函数的执行环境要存储到哪里呢?
函数的执行环境存储到了一个叫做调用栈的地方
二、栈
是一种数据结构,特点:后进先出
2.1、调用栈(call stack)
- 调用栈负责存储函数的执行环境
- 当一个函数被调用时,它的执行环境会作为一个栈帧
- 插入到调用栈的栈顶,函数执行完毕其栈帧会自动从栈中弹出
image.png
三、消息队列
- 消息队列负责存储将要执行的函数
- 当我们触发一个事件(如用户主动点击事件)时,其响应函数并不是直接就添加到调用栈中的
因为调用栈中有可能会存在一些还没有执行完的代码 - 事件触发后,JS引擎是将事件响应函数插入到消息队列中排队
只有栈中任务执行完了,消息队列才会入栈
如果用户点击多次,会在消息队列中排多个任务,遵循先进先出
image.png
网友评论