目录
  1. 1. 事件处理机制
    1. 1.1. 如何证明js执行是单线程的?
    2. 1.2. 为什么js要用单线程模式, 而不用多线程模式?
    3. 1.3. 代码的分类
    4. 1.4. js引擎执行代码的基本流程
    5. 1.5. 模型的2个重要组成部分
    6. 1.6. 模型的运转流程
JS事件处理机制

事件处理机制

如何证明js执行是单线程的?

  • setTimeout()的回调函数是在主线程执行的
  • 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行

为什么js要用单线程模式, 而不用多线程模式?

  • JavaScript的单线程,与它的用途有关。
  • 作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。
  • 这决定了它只能是单线程,否则会带来很复杂的同步问题

代码的分类

  • 初始化执行代码: 包含绑定dom事件监听, 设置定时器, 发送ajax请求的代码
  • 回调执行代码: 处理回调逻辑

js引擎执行代码的基本流程

  • 先执行初始化代码: 包含一些特别的代码 回调函数(异步执行)
    • 设置定时器
    • 绑定事件监听
    • 发送ajax请求
  • 后面在某个时刻才会执行回调代码

模型的2个重要组成部分

  • 事件管理模块
  • 回调队列

模型的运转流程

  • 执行初始化代码, 将事件回调函数交给对应模块管理
  • 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中
  • 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-04/15/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/JS%E4%BA%8B%E4%BB%B6%E5%A4%84%E7%90%86%E6%9C%BA%E5%88%B6/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论