事件循环——图文并茂,带你彻底吃透!♻️
2023-09-04 09:39:23
事件循环到底是什么?
事件循环,就是指 JavaScript 在运行时,它是怎么处理事件、执行任务、更新界面的。
实际上,事件循环 只是一个抽象的概念,它并不对应具体的代码或函数,它只是为了帮助我们理解 JavaScript 的运行机制而提出的一个概念。它的原理并不复杂 ,简单来说,就是 JavaScript 在运行时,它会创建一个叫做事件队列 的容器,用来存放要执行的事件。当事件队列 里存在事件时,JavaScript 就会从事件队列 中取出事件,然后执行这个事件。
事件队列 中存放的事件,都是一些需要 JavaScript 执行的任务,这些任务可以是:
- 用户点击按钮
- 定时器
- AJAX 请求
- 鼠标移动
- 等等
当 JavaScript 执行一个事件时,它会将这个事件从 事件队列中取出,然后执行这个事件。 当事件执行完成后,JavaScript 会检查事件队列 中是否还有其他事件,如果有,它就会继续执行下一个事件。如果没有,它就会等待下一个事件的到来。**
事件循环 就是这样一直不断地循环往复,它会一直等待事件的到来,然后执行事件,然后检查事件队列 中是否还有其他事件,以此类推。
为什么 JavaScript 是单线程,却可以执行异步函数?
JavaScript 是单线程的,也就是说,它一次只能执行一个任务。 这意味着,当 JavaScript 在执行一个任务时,它就不能执行其他任务。
不过,JavaScript 也可以执行异步函数 ,异步函数就是指那些不需要等待结果就可以执行的函数。 比如,我们可以使用setTimeout() 函数来创建一个定时器,这个定时器会在指定的时间后执行一个函数。
当 JavaScript 执行一个异步函数时,它会将这个异步函数放到 事件队列中,然后继续执行其他任务。 当定时器的时间到了,JavaScript 就会从事件队列 中取出这个异步函数,然后执行这个异步函数。**
所以,即使 JavaScript 是单线程的,它也可以执行异步函数,因为异步函数不会阻塞 JavaScript 的执行。
为什么浏览器要采用事件循环?
浏览器之所以要采用事件循环,是因为它需要处理大量的事件。 比如,用户点击按钮、鼠标移动、键盘输入等等,这些都是事件。
如果浏览器不采用事件循环,它就需要为每个事件创建一个新的线程。 这样一来,浏览器的开销就会非常大,而且也很容易造成浏览器崩溃。
而事件循环可以帮助浏览器更好地管理事件。 它可以将所有事件都放到事件队列 中,然后逐个执行这些事件。这样一来,浏览器就可以大大减少开销,而且也不容易崩溃。
什么是 JavaScript 运行时?
JavaScript 运行时,就是 JavaScript 代码在执行时所处的环境。 它包含了 JavaScript 引擎、事件循环 、堆栈 、对象 等。
JavaScript 引擎 是负责执行 JavaScript 代码的组件,它将 JavaScript 代码编译成机器码,然后由计算机执行。事件循环 是负责管理事件的组件,它将事件放到事件队列 中,然后逐个执行这些事件。堆栈 是用来存储函数调用信息的数据结构,它可以跟踪函数的调用顺序。对象 是用来存储数据的容器,它可以存储各种类型的数据。
JavaScript 运行时是 JavaScript 代码执行的基础,没有 JavaScript 运行时,JavaScript 代码就无法执行。
结语
事件循环是 JavaScript 运行时的一个重要组成部分,它负责管理事件的执行。 理解事件循环可以帮助我们更好地理解 JavaScript 的运行机制,从而写出更高质量的 JavaScript 代码。