正常情况下js都是顺序执行的,但是也有很多场景下实际上是异步操作:

1、定时器都是异步操作

2、事件绑定都是异步操作

3、AJAX中一般我们都采取异步操作(也可以同步)

4、回调函数可以理解为异步(不是严谨的异步操作) 剩下的都是同步处理

异步操作产生的本质原因:js单线程event-loop运行模型

由于js会操作dom,而dom要展示出来就必须经过渲染,渲染的dom必须具有完整一致性,我们不能一边渲染dom,同时js操作修改dom.

为了简单地解决并行dom修改和dom渲染可能带来的dom不一致的问题,提出了一个解决方案: 渲染+js顺序运行于一个单线程中,js运行时渲染是停止的,渲染在执行时js是停止运行的。

在这种单线程模式下,如果js执行代码时间过长,比如请求网络下载大文件,这时渲染就将停止,整个页面处于无法接收任何ui输入的状态,也就是卡顿状态,这将严重影响用户的体验。

正因为这样,js引入了异步操作的解决方案:不同步执行所有代码,而是仅同步执行部分代码,异步的js代码则在合适的时机放入异步loop队列中,以便放入js主线程中运行。

比如:

$.ajax("http://www.baidu.com",{success(data){console.log(data)}})

在执行ajax请求后js引擎就继续往下走,等待网络请求顺利完成后,则将success回调放到异步队列中,随后在主线程中被执行。

转载于:https://www.cnblogs.com/kidsitcn/p/10620627.html

javascript中的异步编程相关推荐

  1. JavaScript中的异步梳理(0)

    JavaScript中有大量异步操作,首先可以看看JS中什么东西会产生异步(这里先只考虑浏览器里的情况): Ajax(XMLHttpRequest) Image Tag,Script Tag,ifra ...

  2. JavaScript 中的函数式编程实践

    为什么80%的码农都做不了架构师?>>>    基础知识 函数式编程简介 说到函数式编程,人们的第一印象往往是其学院派,晦涩难懂,大概只有那些蓬头散发,不修边幅,甚至有些神经质的大学 ...

  3. 一文说通C#中的异步编程补遗

    前文写了关于C#中的异步编程.后台有无数人在讨论,很多人把异步和多线程混了. 文章在这儿:一文说通C#中的异步编程 所以,本文从体系的角度,再写一下这个异步编程.   一.C#中的异步编程演变 1. ...

  4. 一文说通C#中的异步编程

    天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章.   一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...

  5. 【转】.Net中的异步编程总结

    一直以来很想梳理下我在开发过程中使用异步编程的心得和体会,但是由于我是APM异步编程模式的死忠,当TAP模式和TPL模式出现的时候我并未真正的去接纳这两种模式,所以导致我一直没有花太多心思去整理这两部 ...

  6. 了解和使用DotNetCore和Blazor中的异步编程

    目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...

  7. .NET中的异步编程——常见的错误和最佳实践

    目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...

  8. JavaScript中的异步、同步

    要理解JS中的异步.同步,需要先了解JS代码的执行过程和Event Loop. JavaScript代码的执行过程 程序需要执行的操作都会被放入Call Stack(A LIFO (Last In, ...

  9. JavaScript中的元编程

    紧接上回,伴随着Reflect,Proxy降世,为js带来了更便捷的元编程! 什么是元编程?这词第一次听,有点懵,好像有点高级,这不得学一下装-进自己的知识库 概念 元编程是一种编程技术,编写出来的计 ...

最新文章

  1. 以下不是python文件读写方法的是-使用Python进行二进制文件读写的简单方法(推荐)...
  2. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
  3. java学习(144):file常用方法1
  4. np.cross函数详解
  5. mysql.5.7 linux_Mysql5.7 Linux安装教程
  6. 即将绝版!小米最经典旗舰降价甩,以后不会再有了
  7. python中字典的键是唯一的吗_Python怎么通过字典的键和值做一个登录程序?
  8. sklearn的快速使用
  9. 学习OO,实现的小跟堆代码
  10. 计算机应用基础考试制作表格,计算机应用基础考试---Excel电子表格公式与函数...
  11. h5大前端常用网站以及npm模块整理
  12. Sepic电路的参数计算及仿真
  13. 泰坦尼克号-数据加载及探索性数据分析
  14. 抖音算法机制,抖音算法规则,抖音算法逻辑
  15. 唯冠和苹果的官司打得热闹
  16. 希捷1.5T硬盘2天变废铁!12代依然问题重重!购买慎重
  17. Matplotlib画蜡烛图
  18. 现在干什么行业最赚钱,什么行业前景好最赚钱?
  19. 电子商务html语言及特点,南开18秋学期(1703)《电子商务网页制作》在线作业答案...
  20. 计算机考研英语复试自我介绍范文,2017考研英语复试自我介绍6篇

热门文章

  1. vue.js中使用radio和checkbox
  2. ORACLE expdp/impdp详解
  3. Python科学计算(一)环境简介——Anaconda Python
  4. [安卓] 7、页面跳转和Intent简单用法
  5. 我无法不是我自己...
  6. git 拉取远程分之到本地
  7. 注解@NotNull/@NotEmpty/@NotBlank
  8. Object-c学习之路三(@class与#import的区别)
  9. 统计学习方法 第一章 学习心得
  10. AS3 in FlashDevelop