简单谈谈JavaScript的同步与异步


Posted in Javascript onDecember 31, 2015

1.手绘一张图说明。

简单谈谈JavaScript的同步与异步

2.为什么JavaScript是单线程(这里引用阮一峰老师的话)

JavaScript的单线程,与它的用途有关。

作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。

这决定了它只能是单线程,否则会带来很复杂的同步问题。

比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。

所以,这个新标准并没有改变JavaScript单线程的本质。

传送门:JavaScript运行机制之事件循环(Event Loop)详解

3.JavaScript的异步体现在哪

如一开始的图,个人认为左边主线程就是同步,左边事件队列(消息队列)就是异步。

当然JavaScript中的异步有很多:

Ajax(XMLHttpRequest)
Image Tag,Script Tag,iframe(原理类似)
setTimeout/setInterval
CSS3 Transition/Animation
postMessage
Web Workers
Web Sockets
and more…
Javascript 相关文章推荐
jQuery 对Select的操作备忘记录
Jul 04 Javascript
javascript中的parseInt和parseFloat区别
Jul 12 Javascript
JavaScript window.location对象
Nov 14 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
Aug 28 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 Javascript
jQuery实现简单的图片查看器
Sep 11 #Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 #Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 #Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
Dec 30 #Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 #Javascript
JavaScript阻止回车提交表单的方法
Dec 30 #Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 #Javascript
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
webpack入门必知必会
2017/01/16 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
详解vue 图片上传功能
2019/04/30 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
微信小程序实现底部弹出框
2020/11/18 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
艺术教育实施方案
2014/05/03 职场文书
党委班子剖析材料
2014/08/21 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
婚礼答谢礼品
2015/01/20 职场文书
兵马俑导游词
2015/02/02 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
我的长征观后感
2015/06/09 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python