学习理解JavaScript一事件与事件循环

229 阅读2分钟

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

前言

前几篇文章, 我们学习记录了JavaScript 中的几个事件函数 (Event), 以及另外其他 各知识点小结的相关阅读: list:

接上文学到的事件, 本文来学习浏览器中JavaScript之 事件和事件循环

事件和事件循环

JavaScript 有一个基于事件循环的并发模型, 事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。

在事件循环的上下文中, 浏览器事件处理程序的行文和其他异步通知相同. 它们在事件发生是进行调度, 但必须等待正在运行的其他脚本运行完才能运行.

事件循环

我们假设一个函数的功能是对一个数字进行平方计算, 假设这是一个繁重的长时间运行的计算, 想要它在一个单独的线程中执行, 可以通过一个单独的squareworker.js文件, 通过前面说的一个计算函数并发回消息来响应

postMessage(ev){ return ev }
addEventListener("message", event => {
  postMessage(event.value * event.value)
})

事件循环之所以称之为 事件循环, 是因为它按类似如下的方式来被实现:

while (queue.waitForMessage()) {
  queue.processNextMessage()
}

queue.waitForMessage() 会同步地等待消息到达(如果当前没有任何消息等待被处理)。

"执行至完成" 每一个消息完整地执行后, 其它消息才会被执行. 这为程序的分析提供了一些优秀的特性, 包括:当一个函数执行时, 它不会被抢占, 只有在它运行完毕之后才会去运行任何其他的代码, 才能修改这个函数操作的数据。如果一个函数在线程中运行, 它可能在任何位置被终止, 然后在另一个线程中运行其他代码。

相关更文阅读

  1. JavaScript 学习理解-Number-这是一个函数
  2. JavaScript 学习理解-自动类型转换
  3. JavaScript 中的中缀运算符
  4. 你知道 JavaScript 的 typeof 是什么吗?
  5. 学习 JavaScript 中几个代表性事件(Event)
  6. 学习理解客户端 JavaScript-事件分类(一)
  7. 客户端 JavaScript-事件分类(二)

carry on

学习, 记录, 积累 是一个漫长的过程!

Buy Less by Know More! Calm Down! 加油!