热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于js使命行列的明白

这篇文章是我本身的一个进修总结,并非异常仔细,连系给出的链接能够有更仔细的熟悉先引见几个观点,便于明白关于堆和栈(作为内存地区来讲)堆(heap):寄存object、array、f
  • 这篇文章是我本身的一个进修总结,并非异常仔细,连系给出的链接能够有更仔细的熟悉
  • 先引见几个观点,便于明白

关于堆和栈(作为内存地区来讲)

  • 堆(heap):寄存object、array、function等不确定内存大小的数据存储;
  • 栈(stack):寄存基础数据类型以及援用数据类型指向堆中的数据的指针,具有详细大小的数据结构,存取速度快;

挪用栈(作为一种代码运转机制)

  • call stack(挪用栈)指的是函数挪用运转的机制,详细参考该链接:javascrip挪用栈

事宜轮回机制(event loop)

参考:js事宜轮回机制

  • 存在全部Javascript剧本实行时期
  • 作用:将使命行列的中能够实行的函数压入挪用栈中

使命行列(task queue)

使命行列重要分为两种:

  1. 宏使命(macro task):在新标准中叫task

    宏使命重要包含:script(团体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering

  2. 微使命(micro task):在新标准中叫jobs

    微使命重要包含:process.nextTick, Promise, Object.observe(已烧毁), MutationObserver(html5新特征)

以上提到的不只有浏览器要领,另有nodejs的要领,这里不详细说清楚明了

实行特性:

  • 每当挪用栈为空时,事宜轮回机制会将一个宏使命行列中使命压入挪用栈中
  • 以空的挪用栈为出发点的话,先实行一切宏使命,再实行一切微使命,然后挪用栈又为空,如许一次能够看做一个单位,以后就是一直在轮回实行如许单位

剖析实行历程:

  1. 实行一切挪用栈中的宏使命
  2. 宏使命实行历程当中发生的微使命加入到微使命行列
  3. 宏使命实行完马上实行一切微使命行列中的使命
  4. 以上实行终了,搜检衬着,GUI线程接受衬着
  5. 衬着终了后,js线程接受,开启下一次事宜轮回(每一次事宜轮回(script不包含),只处置惩罚一个宏使命),实行下一次宏使命(使命行列中取)

不好明白的处所

  • 以上历程(不管宏使命照样微使命实行)中发生的宏使命进入宏使命行列守候,进入背面的轮回实行,不在当次轮回中被实行
  • 然则以上历程当中(包含微使命)发生的微使命又会被马上放到当次轮回的微使命行列背面按递次实行

以上两句能够有点绕,能够参考上面轮回机制的链接,有相干图解。

换个说法:微使命优先于当前挪用栈发生的宏使命被实行

如果能明白下面这段代码的实行历程应当就基础明白使命行列的实行历程了:

setTimeout(() => {
console.log('1')
new Promise((resolve) => {
resolve()
}).then(() => {
console.log('2')
})
}, 0);
setTimeout(() => {
console.log('3')
}, 0);
new Promise((resolve) => {
resolve()
}).then(() => {
console.log('4')
new Promise((resolve) => {
resolve()
}).then(() => {
console.log('5')
})
setTimeout(() => {
console.log('6')
}, 0);
})
new Promise((resolve) => {
resolve()
}).then(() => {
console.log('7')
})
// 输出递次为: 4,7,5,1,2,3,6

推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
author-avatar
保佑欣疼你的芯疼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有