事件处理机制--浏览器流程处理分析

js的运行是单线程的,单线程即一个时间只能做一件事。浏览器的运行是多线程的。

如下三种情况会进入事件队列(任务队列)中,但不立即执行:

  1.定时函数

  2.事件函数

  3.ajax的回调函数(xhr.onreadystatechange = function(){};  //会调用多次)

主线程中先执行非事件队列函数,再执行事件队列函数,事件队列中的事件先进去的先被判断,但不一定先被执行。事件队列中谁先满足条件先执行谁。

事件队列中的任务执行是有条件的:(前提条件:主线程必须是空闲的)

  1.定时函数的触发条件(到达延时事件)(延时时间不精确)定时器从放入队列时开始计时,超时的定时函数优先执行

  2.事件函数的触发条件(特定的事件发生)

  3.Ajax回调函数的触发条件(服务器有数据响应时触发:xhr.readyState状态发生变化时触发)

事件队列中的任务先进先出

先进先出:优先被判断,但不一定优先被执行

举例说明:

1. 定时函数:

<script type="text/javascript">console.log(1);setTimeout(function(){console.log(2);}, 0); //0表示以最小延时去执行var sum = 0;for(var i = 0; i < 100; i++) {sum += i;}console.log(sum);console.log(3);
</script>

所以以上代码的输出结果为:

  1
  4950
  3
  2

2. 事件函数

<input type="button" value="按钮" id="btn"><script type="text/javascript">var btn = document.getElementById('btn');console.log(1);btn.onclick = function(){console.log(2);}console.log(3);
</script>

运行后点击按钮,输出结果为: 

  1
  3
  2

3. Ajax回调函数

var xhr = new XHLHttpRequest();
xhr.open();
xhr.send();
console.log(1);
var data = null;
xhr.onreadystatechange = function(){console.log(2);data = xhr.responseText;
}
console.log(data); // data先输出才执行函数,所以应使用回调函数实现
console.log(3);

转载于:https://www.cnblogs.com/-lizi/p/7098183.html

事件处理机制--浏览器流程处理分析相关推荐

  1. 【SemiDrive源码分析】【X9芯片启动流程】21 - MailBox 核间通信机制介绍(代码分析篇)之 Mailbox for Linux 篇

    [SemiDrive源码分析][X9芯片启动流程]21 - MailBox 核间通信机制介绍(代码分析篇)之 Mailbox for Linux 篇 一.Mailbox for Linux 驱动框架分 ...

  2. 【SemiDrive源码分析】【X9芯片启动流程】20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇

    [SemiDrive源码分析][X9芯片启动流程]20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇 一.Mailbox for RTOS 源码分析 1. ...

  3. Action与ActionListener的事件处理机制及实例分析

    xjtuer最好不要抄,五次作业都是去年优秀作业,被老师逮住全给0分就得不偿失了,放在这里是给大家一个思路不用再去查找很多资料,了解之后再自己总结写一写 事件处理机制的分析 swing的事件处理机制其 ...

  4. 【SemiDrive源码分析】【X9芯片启动流程】23 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC Kernel 篇

    [SemiDrive源码分析][X9芯片启动流程]23 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC Kernel 篇 一.RPMSG 接口 1.1 Linux Kern ...

  5. 【SemiDrive源码分析】【X9芯片启动流程】25 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC RTOS QNX篇

    [SemiDrive源码分析][X9芯片启动流程]25 - MailBox 核间通信机制介绍(代码分析篇)之 RPMSG-IPCC RTOS & QNX篇 一.RPMSG 接口 1.1 Lin ...

  6. 事件争夺战 Android事件处理机制与原理分析

    事件争夺战 Android事件处理机制与原理分析 文章目录 事件争夺战 Android事件处理机制与原理分析 View的继承关系 View的事件处理源码 总结: ViewGroup的事件分发源码 总结 ...

  7. core java 8~9(GUI AWT事件处理机制)

    MODULE 8 GUIs -------------------------------- GUI中的包: java.awt.*; javax.swing.*; java.awt.event.*; ...

  8. ​iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景.

    2019独角兽企业重金招聘Python工程师标准>>> 主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在 ...

  9. QT开发(十二)——QT事件处理机制

    一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 ...

最新文章

  1. XML之父从愤然亚马逊离职,放弃百万年薪,谷歌华为争抢
  2. android web3j 代币查询_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账
  3. html5中的一些标签学习总结
  4. python 代码文件路径注意事项
  5. excel vba 如何将日期周几转换成文字_Excel 从精通到入门
  6. 如何在Python中解析XML?
  7. java颜色常量,Java FX场景构建器无法识别css自定义颜色常量(或变量)
  8. java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport ...
  9. Win7无法正常使用TTS语音的解决办法
  10. Github客户端下载以及使用方法
  11. python模块下载网址
  12. 《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述
  13. MFC中动态检测串口热插拔的实现
  14. windows服务器设置开机启动的几种方式
  15. JAVAWEB第五天XML简介及语法
  16. 数组和字符串赋值的问题(定义时不初始化)
  17. Mysql配置文件/etc/my.cnf解析
  18. 魔力宝贝服务器修改器装备,【法兰城的回忆】魔力宝贝游戏手工架设服务端+客户端修改工具+流程说明...
  19. BUUCTF RSA2
  20. 计算机社团基础,计算机社团招新策划

热门文章

  1. Hive_Hive的数据模型_内部表
  2. 在ionic/cordova中使用百度地图插件
  3. 权限分配界面 纯手工 仅用到bootstrap的架构 以及 c标签
  4. 关于个人防火墙的真相
  5. [转]在jQuery的each()函数中使用continue和break
  6. 用myeclipse搭建S2SH struts2 spring hibernate
  7. 在WinCE中实现Screen Rotation(屏幕旋转)
  8. 锁表的进程和语句,并杀掉
  9. OllyDBG 入门之四--破解常用断点设
  10. 3.2 读入两个参数