简单谈谈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程序来实现动画功能
Mar 06 Javascript
客户端限制只能上传jpg格式图片的js代码
Dec 09 Javascript
javascript 基础篇2 数据类型,语句,函数
Mar 14 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
Apr 02 Javascript
jquery实现简单合拢与展开网页面板的方法
Sep 01 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
12个非常实用的JavaScript小技巧【推荐】
May 18 Javascript
JS原型链 详解及示例代码
Sep 06 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
Dec 28 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
深入理解javascript中的this
Feb 08 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
详解jquery和vue对比
2019/04/16 jQuery
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
python类继承用法实例分析
2014/10/10 Python
使用Python写一个小游戏
2018/04/02 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python实现简单的文字识别
2018/11/27 Python
python仿抖音表白神器
2019/04/08 Python
python 实现绘制整齐的表格
2019/11/18 Python
django框架forms组件用法实例详解
2019/12/10 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
PHP高级工程师面试问题推荐
2013/01/18 面试题
职业生涯规划书结束语
2014/04/15 职场文书
班委竞选演讲稿
2014/04/28 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2015年维修工作总结
2015/04/25 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书