简单谈谈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 & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
Nov 08 Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
Bootstrap页面标题Page Header的实现方法
Mar 22 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
Vue select 绑定动态变量的实例讲解
Oct 22 Javascript
如何将JavaScript将数组转为树形结构
Jun 02 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
多重?l件?合查?(一)
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
php 中的closure用法详解
2017/06/12 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
python 数据的清理行为实例详解
2017/07/12 Python
pandas数值计算与排序方法
2018/04/12 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
python 数据类型强制转换的总结
2021/01/25 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
报关员个人职业生涯规划书
2014/03/12 职场文书
党员创先争优活动总结
2014/05/04 职场文书
无毒社区工作方案
2014/05/23 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android