简单谈谈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 相关文章推荐
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Jun 05 Javascript
js调试系列 初识控制台
Jun 18 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
详解VUE中v-bind的基本用法
Jul 13 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
vue中引入第三方字体文件的方法示例
Dec 17 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 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中目录,文件操作详谈
2007/03/19 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
php常用hash加密函数
2014/11/22 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Django自定义manage命令实例代码
2018/02/11 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
团委竞选演讲稿
2014/04/24 职场文书
财务会计专业求职信
2014/06/09 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
大学生团日活动总结
2015/05/06 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
Java基础之this关键字的使用
2021/06/30 Java/Android
Python实现视频中添加音频工具详解
2021/12/06 Python