理解力JQuery前实现异步队列,有必要理解javascript异步模式.
Javascript异步其实并不严重格异步感,js使某些片段异步方式在将来运行,流不必等待继续向下进行.
在多线程的语言中最easy想到的异步方式就是在当前线程中,新创建一个线程让某段代码片段执行在新创建的线程中,从而使当前线程继续向下进行.
而不论什么一本书关于js的书都会告诉我们js是执行在单线程里的,这个线程称为UI线程,从名字就知道这个线程不光用于执行js代码,还负责事件的处理和UI的绘制.
在游览器内部维护着一个事件队列,触发的事件会一个个的放进这个队列中,UI线程在空暇时会去查看这个队列,假设队列不为空,就取第一个事件并运行其监听函数.

for (var i = 0; i < 3; ++i) {setTimeout( function(){console.info( 'setTimeout: ' + i);}, 0);console.info( 'for循环: ' + i)
}
上面这段代码在UI线程的运行示意图图例如以下

首先将此段js代码放进UI线程中运行,当代码运行到setTimeout(fn, mills)时,游览器会在事件队列中放入此定时事件1,前面说过仅仅有当UI线程空暇时才会去运行定时事件,但此时js代码还在运行,所以继续for循环,i继续自增,而且继续放入定时事件2,3,当js代码片段运行完成后,才继续依次运行定时事件1、2、3,此时i的值已经是3了.所以在控制台中我们看到的打印结果依次是:setTimeout:1,setTimeout:2,setTimeout:3,for循环:3,for循环:3,for循环:3.
事实上这样看起来很类似与传统多线程的异步编程,代码运行流并不会等setTimeout的函数运行完成,再继续向下运行.但我们要了解的是,事实上它们仍然是串行运行的,仅仅只是是把setTimeout中设置的函数放到队列中延后运行,从而使js代码依旧先运行,运行完成后再依次运行事件队列中的性能.

版权声明:本文博主原创文章。博客,未经同意不得转载。

JQuery日记6.5 Javascript异步模式(一)相关推荐

  1. JavaScript异步调用的发展历程

    同步与异步 通常,代码是由上而下依次执行的.如果有多个任务,就必须排队,前一个任务完成,后一个任务才能执行.这种连续的执行模式就叫做同步. a(); b(); c(); 复制代码 上面代码中,a.b. ...

  2. Javascript异步编程的4种方法

    你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排 ...

  3. JS异步模式与Promise模式

    JS异步模式与Promise模式 - 转 引子 异步模式在web编程中变得越来越重要,对于web主流语言Javascript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 j ...

  4. [转载]Javascript异步编程的4种方法

    NodeJs的最大特性就是"异步" 目前在NodeJs里实现异步的方法中,使用"回调"是最常见的. 其实还有其他4种实现异步的方法: 在此以做记录 --- ht ...

  5. (转)javascript异步编程的四种方法

    本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...

  6. JavaScript异步编程的四种方法(转)

    作者: 阮一峰 日期: 2012年12月21日 你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是 ...

  7. JavaScript异步编程

    JavaScript异步编程 一.概述 1.单线程模型 2.同步任务和异步任务 3.任务队列和事件循环 4.异步操作的模式 回调函数 事件监听 发布/订阅 5.异步操作的流程控制 串行执行 并行执行 ...

  8. Javascript异步编程方法有哪些

    Javascript 语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个 ...

  9. [书籍精读]《JavaScript异步编程》精读笔记分享

    写在前面 书籍介绍:本书讲述基本的异步处理技巧,包括PubSub.事件模式.Promises等,通过这些技巧,可以更好的应对大型Web应用程序的复杂性,交互快速响应的代码.理解了JavaScript的 ...

最新文章

  1. Centos 7 意外断电如何处理
  2. Vitamio打造自己的Android万能播放器
  3. 理解spark中的job、stage、task
  4. shiro认证与授权:基于ini的用户授权
  5. 韭菜的自我修养-认知篇
  6. 关于windows CE Platform Builder中模拟器的限制
  7. 程序员的每个阶段,都应该需要思考自己要什么?
  8. 「以云为核,无感极速」顶象第五代验证码
  9. c语言c98和c99,c99和c98的差异
  10. Yii2中如何使用CodeCeption
  11. offline translator android app,PROMT Offline Translator English Pack
  12. 2022.12.13 英语背诵
  13. imx6 android4.4 Recovery添加从U盘升级功能
  14. 分享20个无版权的高清无 码图库站
  15. Codeforces Round #818 (Div. 2)
  16. Ruby on Rails 之旅(七)—— Ruby on Rails 入门(5)
  17. 一、电脑端实现单片机与ESP8266的通信
  18. java经典小算法----小球从100米高度自由落下;
  19. JVM报错:C [libresolv.so.2+0x7a91] __libc_res_nquery+0x1c1
  20. exfat和ntfs和linux,EXFAT和NTFS哪个好

热门文章

  1. LLVM系列文章1: Debian/Ubuntu 安装和使用 LLVM
  2. Linux :debian(ubuntu)下安装和使用haskell
  3. Java实现markdown转html,并且生成TOC目录
  4. AWS S3云存储服务
  5. 两路虚拟化服务器,服务器虚拟化(二)
  6. kafka高可用(集群)
  7. android动作传感器
  8. python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...
  9. cstring 比较_属牛人和属蛇人姻缘婚配关系比较和谐
  10. Dockerfile镜像优化方案指引