简单谈谈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 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
JavaScript语言核心数据类型和变量使用介绍
Aug 23 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
angularjs中的e2e测试实例
Dec 06 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
Bootstrap基本组件学习笔记之进度条(15)
Dec 08 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
Feb 27 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
node.js通过axios实现网络请求的方法
Mar 05 Javascript
JavaScript常见鼠标事件与用法分析
Jan 03 Javascript
vue滚动固定顶部及修改样式的实例代码
May 30 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
vue接口请求加密实例
2020/08/11 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
python实现端口转发器的方法
2015/03/13 Python
Python中的ctime()方法使用教程
2015/05/22 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
python编写俄罗斯方块
2020/03/13 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
彩妆大赛策划方案
2014/05/13 职场文书
律师函格式范本
2015/05/27 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
为Java项目添加Redis缓存的方法
2021/05/18 Redis
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python