这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了简单谈谈 JavaScript 的同步与异步的相关资料, 需要的朋友可以参考下
1. 手绘一张图说明。
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…
来源: http://www.phperz.com/article/17/0409/267822.html