前言
学习一门语言的语法并且能写出一些功能是很简单的, 但要真正的掌握一门语言, 不能只停留在语法层, 重点是而是要去探究这个语言为何诞生, 用于何处和别的语言在本质上有何不同, 又为何这样设计, 在繁杂的语法中找出本质的东西.
JavaScript 的诞生?
1994 年, 网景公司发布了历史上第一个比较成熟的网络浏览器, 轰动一时. 但是, 这时浏览器只能用来看东西, 无法与用户交互的. 比如用户填写了用户名, 浏览器无法判断用户有没有填, 每一次填写都必须让服务端判断, 如果错了, 就要重新填, 这样非常的耗费时间和服务器的资源.
因此急需一个语言, 可以让浏览器和用户互动, 当时, Java 语言非常的火爆, 但是 Java 语言嵌入脚本会使得网页很复杂, 因此放弃了, 后来网景公司决定发明一种新的语言, 这个语言要和 Java 语法相似, 但是比 Java 简单, 让非专业的网页作者也能很快上手.
34 岁的系统程序员 Brendan Eich 负责设计这个脚本语言, 但是, 他对 Java 一点兴趣也没有. 为了应付公司安排的任务, 他只用 10 天时间就把 JavaScript 设计出来了. 由于设计时间太短, 语言的一些细节考虑得不够严谨, 导致后来很长一段时间, JavaScript 写出来的程序混乱不堪. 他的设计思路是这样的:
(1)借鉴 C 语言的基本语法;
(2)借鉴 Java 语言的数据类型和内存管理;
(3)借鉴 Scheme 语言, 将函数提升到 "第一等公民"(first class)的地位;
(4)借鉴 Self 语言, 使用基于原型 (prototype) 的继承机制.
所以, JavaScript 语言实际上是两种语言风格的混合产物 ----(简化的)函数式编程 +(简化的)面向对象编程. 这是由 Brendan Eich(函数式编程)与网景公司 (面向对象编程) 共同决定的.
JavaScript 推出后在浏览器上大获成功, 后面不同的公司就推出了新的实现, 这使得 JavaScript 使用收到阻碍.
1996 年 11 月, 网景正式向 ECMA(欧洲计算机制造商协会)提交语言标准. 1997 年 6 月, ECMA 以 JavaScript 语言为基础制定了 ECMAScript 标准规范 ECMA-262,JavaScript 成为了 ECMAScript 最著名的实现之一.
因此, ECMAScript 是一个语言标准, JavaScript 可以认为是 ECMAScript 的一个实现.
一般来说, 完整的 JavaScript 包括以下几个部分:
ECMAScript, 描述了该语言的语法和基本对象
文档对象模型(DOM), 描述处理网页内容的方法和接口
浏览器对象模型(BOM), 描述与浏览器进行交互的方法和接口
JavaScript 是什么?
维基百科: JavaScript, 是一种高级的, 解释执行的脚本语言 [5].JavaScript 是一门基于原型, 函数先行的语言[6], 是一门多范式的语言, 它支持面向对象编程, 命令式编程, 以及函数式编程. 它提供语法来操控文本, 数组, 日期以及正则表达式等, 不支持 I/O, 比如网络, 存储和图形等, 但这些都可以由它的宿主环境提供支持. 它已经由 ECMA(欧洲计算机制造商协会) 通过 ECMAScript 实现语言的标准化[5].
从维基百科的解释中, 我们可以得出几个信息:
是一种高级的, 解释执行的脚本语言
有自己的语法特性: 基于原型, 函数先行等, 语法上遵循 ECMAScript 标准
宿主环境
下面我们从这些关键词来解释这门语言.
高级
我们常常听说的语言有三种: 机器语言, 汇编语言, 高级语言.
机器语言: 计算机是采用二进制进行计算的, 这种二进制语言叫做机器语言
汇编语言: 为了写代码方便, 汇编语言诞生了, 也叫字节码, 中间码等, 比二进制稍微高级的标识语言 比如 ADD a 代表 010101 一般一个标识语句 对应一个机器语言
高级语言: 为了写代码更方便, 高级语言诞生了, 一行可以被转换成多行机器语言. JavaScript 就是一种高级语言.
所有的高级语言需要被转换成二进制语言才能被执行. 而转换二进制需要特定的工具. 这个工具一般是编译器或者解释型
解释执行
高级语言执行前, 都需要被转换成二进制. 但对于这个转换过程, 有很多种不同的方式. 所以才诞生了解释执行, 编译型等. 其实本质都是一样的.
解释执行: 高级代码直接放在运行环境中, 由解释器解释成二进制, 每一次执行都会重新解释, 所以运行的速度相对慢.
编译执行: 高级代码先编译成二进制, 再放到运行环境直接运行. 一次解释, 直接运行, 所以运行很快.
其他: 高级代码先编译成汇编语言, 然后放到运行环境, 一边编译成二进制, 一边运行, 属于上面二则的折中.
notes: 汇编语言转成二进制 会比高级语言转成二进制的速度要快.
JavaScript 由 JavaScript 引擎来执行, 虽说 JavaScript 是解释执行, 但是引擎有做一些优化, 这个就要具体去学习了, 这里先不讨论.
脚本语言
其实 "脚本语言" 与 "非脚本语言" 并没有语义上, 或者执行方式上的区别. 它们的区别只在于它们设计的初衷: 脚本语言往往是为某一特定运行时环境编写的程序, 支持自动执行任务的编程语言. 比如 JS 一开始设计主要是在浏览器环境运行的.
宿主环境
JavaScript 本身只是一门语言, 语言要想运行, 就要提供执行语言的环境, JavaScript 的运行环境主要有浏览器和 Node, 浏览器中提供了 JS 引擎来解析代码, Node 提供了 V8 引擎来解析 JavaScript 代码
流行的 JavaScript 引擎:
V8: 开源, Google 开发, C++,Chrome 浏览器 Rhino: 开源, Mozilla 开发, Java
SpiderMonkey: 第一个 JavaScript 引擎, 网景浏览器 (之前) 和 Firefox(现在)
JavaScriptCore: 开源, 苹果 Safari 浏览器 - Chakra(JSscript9):Internet Explorer 浏览器
Chakra(JavaScript):Microsoft Edge 浏览器
语法特性
这个点比较多, 以后的文章中具体介绍
GitHub 地址, 持续更新, 欢迎 star:
来源: https://www.cnblogs.com/moqing/p/10560104.html