首页 > 编程语言 >系统化学习前端之JavaScript(ES6:异步编程)

系统化学习前端之JavaScript(ES6:异步编程)

时间:2023-04-04 17:47:24浏览次数:53  
标签:ES6 函数 异步 JavaScript 函数调用 任务 执行

前言

JavaScript 异步编程这块东西比较多,涉及到宏任务和微任务,所以单开一个篇幅梳理一下。

同步和异步

同步和异步是一种宏观概念,具体表现在 JavaScript 中,是同步任务和异步任务,即同步函数和异步函数。

同步

同步指函数在 JavaScript 同步执行。

同步函数执行过程:A 函数进入函数调用栈,等待 A 函数执行完成后,B 函数进入函数调用栈,等待 B 函数执行完成后,C 函数...

异步

异步指函数在 JavaScript 异步执行。

异步函数执行过程:A 函数进入函数调用栈,判断 A 函数是否为同步函数,是则等待 A 函数执行完成后,B 函数进入函数调用栈,判断 B 函数是否为同步函数,否则添加至任务队列。

注意:任务队列根据 "执行者" 不同可以分为微任务队列和宏任务队列,具体可参考 V8 中异步回调

JavaScript 执行流程

JavaScript 执行函数是通过调用栈进行的,按照全局作用域中的函数顺序(先进后出)依次进入函数调用栈执行。

JavaScript 函数执行顺序

  1. 函数调用栈依次执行全局作用域中的函数任务。

  2. 同步函数任务,函数调用栈会依次执行完成。

  3. 同步函数任务执行完成,函数调用栈会执行微任务队列中的微任务(微任务也是函数任务,只不过是回调函数)。

  4. 执行完微任务队列以后,函数调用栈会执行宏任务队列中的宏任务(宏任务也是回调函数)。

异步编程

后记

标签:ES6,函数,异步,JavaScript,函数调用,任务,执行
From: https://www.cnblogs.com/huangminghua/p/17286017.html

相关文章

  • JavaScript:数组删除指定元素
    1.shift()方法用于删除数组中的第一个元素。注:此方法会改变数组的长度letarr=[1,2,3]arr.shift()//删除1//arr为[2,3]2.pop()方法用于删除数组中最后一个元素注:此方法会改变数组的长度letarr=[1,2,3]arr.pop();//删除3//arr为[1,2]3.splice()方法用于......
  • 为什么 JavaScript 中 0.1 0.2 不等于 0.3 ?
    vivo互联网技术微信公众号 作者:刘洋在js中进行数学的运算时,会出现0.1+0.2=0.300000000000000004的结果,一开始认为是浮点数的二进制存储导致的精度问题,但这似乎不能很好的解释为什么在同样的存储方式下0.3+0.4=0.7可以得到正确的结果。本文主要通过浮点数的二进制存储及运算,和......
  • Flutter 异步编程指南
    作者:京东物流 王志明1Dart中的事件循环模型在App开发中,经常会遇到处理异步任务的场景,如网络请求、读写文件等。Android、iOS使用的是多线程,而在Flutter中为单线程事件循环,如下图所示Dart中有两个任务队列,分别为microtask队列和event队列,队列中的任务按照先进先出......
  • 如何进行SpringMVC异步编程
    前言SpringMVC是我们平时用的最多的异步编程框架,但是我们在使用的时候基本上只是用到了它的同步编程。一般情况下是够用的,但是在并发量比较大的时候可能就不会够用了,因为一个请求会占用一个tomcat线程,这个时候我们可以尝试使用异步编程的方式来提高吞吐量。环境准备maven依赖:......
  • 编程里同步和异步的选择
    同步是指方法调用后必须等到返回才会执行后续代码异步是方法调用没等到返回也可以继续执行后续代码在java中如果是多线程,而各线程间会公用一个变量时,需要使用同步来保证线程安全,否则异步就是最好的在前端js中,一般http请求都是默认异步的,允许在发送http请求时执行其他函数,这样......
  • 详细解析Java异步线程处理队列任务工具类以及实战
    场景待入快速理解小场景描述:【一群人】来到【一个大厅】办理业务,大厅中有【多个窗口】给我们办理业务。每个人都有自己要办事情,处理过程需要消耗时间。大厅根据人群多少,开始窗口梳理。如果把“一群人”理解成一群待处理的n个【任务】,把这群人排成一个长队就形成了一个【任......
  • javascript VS python 变量作用域
    js中函数内部默认是可以读取到外部声明的变量,python不可以,必须使用关键字globalglobal必须在函数内部使用,用以内化函数外部变量。在函数外部是无法声明全局变量的,或者说所谓的全局变量在函数内部是不好使的,这还叫什么全局变量?应该叫局外变量。而global是内部跟局外变量建立一种......
  • 68.innodb之关键特性(异步IO)
    mysql支持异步io,为了提高磁盘操作性能,当前的数据库系统都采用异步IO(AsynchronousIO,AIO)的方式来处理磁盘操作异步IO相较于同步IO而言的是,当它每扫描一个页之后不需要等待其完成就可以再进行扫描下一次的扫描,另外一个优势是可以进行IOmerge操作,也就是可以将多个IO合并成一个IO......
  • JS基础《JavaScript精粹》笔记摘录
    基础概念和语法基本类型、null、undefined、NaNJavaScript定义了一小批基本类型(primitivetype),它们包括字符串类型(string,单引号或双引号包起来)、数值类型(number,整数和小数都用这个类型)和布尔类型(boolean,值仅有true和false)。JavaScript使用两个特殊的值来表示不存在有意义的值—......
  • HTML + javascript implement a draggable list 一个可以拖拽交换顺序的列表
    Reference:https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dragover_event<body><styletype="text/css">.draggable{text-align:center;background:red;width:20px;......