简单谈谈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 相关文章推荐
JavaScript延迟加载
Mar 09 Javascript
javascript同页面多次调用弹出层具体实例代码
Aug 16 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 Javascript
自己封装的常用javascript函数分享
Jan 07 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 Javascript
基于Jquery实现表单验证
Jul 20 Javascript
程序员必知35个jQuery 代码片段
Nov 05 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
vue Element左侧无限级菜单实现
Jun 10 Javascript
微信小程序弹窗禁止页面滚动的实现代码
Dec 30 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
中英文字符串翻转函数
2008/12/09 PHP
php中Smarty模板初体验
2011/08/08 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP中把stdClass Object转array的几个方法
2014/05/08 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
JavaScript 指导方针
2007/04/05 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python之web模板应用
2017/12/26 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
上班离岗检讨书
2014/09/10 职场文书
师德师风自我评价范文
2014/09/11 职场文书
拖欠货款起诉状
2015/05/20 职场文书
单位综合评价意见
2015/06/05 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
导游词之无锡唐城
2019/12/12 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python