简单谈谈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动态为代码着色显示行号
May 29 Javascript
JavaScript中操作Mysql数据库实例
Apr 02 Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
浅谈webpack SplitChunksPlugin实用指南
Sep 17 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 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实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
利用JS实现数字增长
2016/07/28 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
JavaScript实现简单计算器功能
2019/12/19 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
python常用函数详解
2016/09/13 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
视光学专业自荐信
2014/06/24 职场文书
客房领班岗位职责
2015/02/11 职场文书
刑事辩护词范文
2015/05/21 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
python中的getter与setter你了解吗
2022/03/24 Python