简单谈谈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 获取子节点函数 (兼容FF与IE)
Apr 18 Javascript
JS实现self的resend
Jul 22 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
Sep 24 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 Javascript
jQuery多个input求和的实现方法
Feb 12 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
Express的路由详解
Dec 10 Javascript
动态设置form表单的action属性的值的简单方法
May 25 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
jQuery实现评论模块
Aug 19 jQuery
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
JAVA/JSP学习系列之二
2006/10/09 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
原生js实现轮播图
2017/02/27 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
微信小程序自定义组件
2017/08/16 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
实习生自荐信范文
2013/11/13 职场文书
成品仓管员工作职责
2013/12/29 职场文书
母亲节感恩寄语
2014/02/21 职场文书
承诺书格式
2014/06/03 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
烈士陵园观后感
2015/06/08 职场文书
理想国读书笔记
2015/06/25 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers