介绍
JavaScript是一门解释型、弱类型语言,只在一个线程上运行,1995年诞生于Netscape(网景)公司。完整的JavaScript由ECMAScript、DOM和BOM组成。
ECMAScript
ECMAScript是JavaScript的标准,由ECMA(欧洲计算机制造商协会)发布。
ECMAScript制定语言标准,不涉及语言的运行环境。正是因为ECMAScript避免了运行环境,就让自己有机会在各种环境中执行,也因此成为了通用编程语言。
通常情况下,把ECMAScript的运行环境称为宿主环境, 如浏览器,node环境。
历史
- ES1,1997年6月发布
- ES2,1998年6月发布
- ES3,1999年12月发布,成为JavaScript的通行标准,得到广泛支持
- ES4,2007年10月发布草案,因改动过于激进,各方对于是否发布这个标准发生严重分歧,后来中止开发ES4
- ES5,2009年12月发布,习惯上,不再区分JavaScript和ECMAScript
- ES6,2015年6月发布,ECMA宣布,从ES6开始,使用年号作为版本号,ES6的真正称呼为:ES2015
- ES2016,2016年6月发布
- ES2017,2017年6月发布
- ES2018,2018年6月发布
- ES2019,2019年6月发布
- ES2020,2020年6月发布
- ES2021,2021年6月发布
DOM
文档对象模型(Document Object Model,简称DOM),在网页加载时,浏览器会创建页面的DOM,用来描述文档的结构。我们可以使用JavaScript访问DOM并对其进行操作,如修改DOM样式,添加监听事件,删除DOM等。
BOM
浏览器对象模型(Browser Object Model,简称BOM),使JavaScript能够使用由浏览器提供的一些能力,如获取浏览器窗口尺寸、打开新窗口,关闭当前窗口等。
特点
解释型语言
解释型语言
在程序执行时,将代码逐句翻译成机器语言并执行,因此每执行一次就要翻译一次,执行效率较低。
优点:跨平台,部署简单
缺点:执行效率低(但现在的JS执行引擎V8已经让JS代码的执行速度非常快了)
常见的解释型语言:JavaScript、PHP、Python
编译型语言
在程序执行之前,需要有一个将代码编译的过程,编译后产生的代码可以直接运行,执行速度更快。
优点:执行速度快
缺点:一些编译结果难以适应其他环境(跨平台困难)、部署繁琐(若更新文件,需要重新编译一次)
常见的编译型语言:Java、C语言、C++
弱类型语言
弱类型语言
存放的数据类型可变
优点:灵活、易上手
缺点:不严谨(导致JavaScript不适用大型大项目,但由于V8引擎和其他框架的出现,已经具备这个能力了)
通常情况下,我们将弱类型语言称为脚本语言
强类型语言
存放的数据不可变
优点:严谨
缺点:不灵活、不易上手
单线程
单线程
做完上一件事情,才能继续做下一件事情
优点:复杂度低,易于控制
缺点:效率低
为了提高单线程的效率,出现了异步
多线程
多件事情一起干
优点:效率高
缺点:复杂度高,难以控制
Q&A
为什么 JavaScript 不能是多线程?
JavaScript 的单线程,和它的用途有关。作为浏览器脚本语言,JavaScript 的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。假定 JavaScript 同时有两个线程,一个线程在某个 DOM 节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?还有人说 JavaScript 有Worker线程,确实,为了利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线程,但是子线程是完全受主线程控制的,而且不得操作 DOM。所以这个标准并没有改变 JavaScript 是单线程的本质。