javascript事件循环event loop的简单模型解释与应用分析


Posted in Javascript onMarch 14, 2020

本文实例讲述了javascript事件循环event loop的简单模型解释与应用.分享给大家供大家参考,具体如下:

js是单线程的,但是event loop的出现,使得js拥有可以处理高并发的性能。那么怎么理解event loop呢?网上百度一堆文章,什么heap,stack,micro queue,macro queue,让初学者直接懵掉。这里采用很通俗的理解方式介绍下event loop.

event loop顾名思义是事件循环,既然是循环,那循环的是什么呢?

对于一个js文件,

1,执行当前执行上下文(初次是全局作用域)的所有同步任务,有异步任务的透出

2,执行任务队列里第一个异步任务,

3,执行当前异步任务执行上下文的所有同步任务,有异步任务透出

从上面的执行顺序可以清楚的看到循环执行的是什么,event loop循环中的循环任务是指:

执行某个执行上下文的所有同步任务,透出异步任务

看一个简单实例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>event-loop-test</title>
</head>
<body>
  <script>
    setTimeout(function(){
      console.log('测试定时事件循环')
      new Promise(function(resolve,reject){
        resolve('内层数据')
      }).then(function(data){
        console.log(data)
      })
      console.log('测试测试测试111')
      for(var i = 0; i<5000; i++){
        console.log('异步任务中的耗时同步任务')
      }
      setTimeout(function(){
        console.log(22222)  //这里透出的异步任务会在testPromise之后,在上面的for循环执行过后,testPromise已经透出异步任务,放到队列中
      },0)
    },0)
    for(var i = 0; i<5000; i++){
      console.log('测试event loop')
    }
    for(var i = 0; i<5000; i++){
      console.log('测试event loop2')
    }
    var testPromise = new Promise(function(resolve,reject){
      console.log('直接测试promiseneibu')
      setTimeout(function(){
        resolve('promise测试')
        console.log('promise内部的console') 
      },10)
    })
    testPromise.then(function(data){
      console.log(data)
    })
    console.log('我是直接运行的')
  </script>
</body>
</html>

javascript事件循环event loop的简单模型解释与应用分析

由上面的实例和分析可以得出:

任务队列中的异步任务透出和循环层级是没有关系的,任务队列中的异步任务是根据透出先后顺序排列的

建立一个简单模型:

javascript事件循环event loop的简单模型解释与应用分析

 

也可以理解为:

javascript事件循环event loop的简单模型解释与应用分析

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JQUERY获取form表单值的代码
Jul 17 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
jquery插件hiAlert实现网页对话框美化
May 03 Javascript
jquery 中ajax执行的优先级
Jun 22 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
js实现简单抽奖功能
Nov 24 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
Mar 14 #Javascript
js实现的订阅发布者模式简单示例
Mar 14 #Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 #Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 #Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 #Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 #Javascript
JS原型prototype和__proto__用法实例分析
Mar 14 #Javascript
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
微信小程序实时聊天WebSocket
2018/07/05 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
python抖音表白程序源代码
2019/04/07 Python
django的model操作汇整详解
2019/07/26 Python
python 两个数据库postgresql对比
2019/10/21 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
优秀团员自我评价范文
2014/04/23 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
软件测试专业推荐信
2014/09/18 职场文书
库房管理员岗位职责
2015/02/12 职场文书
获奖感言范文
2015/07/31 职场文书
公司车队管理制度
2015/08/04 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python