简单谈谈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 相关文章推荐
js 效率组装字符串 StringBuffer
Dec 23 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
Mar 13 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
May 20 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
浅析JavaScript 调试方法和技巧
Oct 22 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
[js高手之路]寄生组合式继承的优势详解
Aug 28 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 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函数常用用法小结
2010/02/08 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
javascript读取RSS数据
2007/01/20 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
python与C互相调用的方法详解
2017/07/14 Python
python的mysqldb安装步骤详解
2017/08/14 Python
python机器学习之神经网络(一)
2017/12/20 Python
python3中rank函数的用法
2019/11/27 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
婚纱店策划方案
2014/05/22 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
web前端之css水平居中代码解析
2021/05/20 HTML / CSS