【重学JS】JS是什么?

前言

学习一门语言的语法并且能写出一些功能是很简单的,但要真正的掌握一门语言,不能只停留在语法层,重点是而是要去探究这个语言为何诞生,用于何处和别的语言在本质上有何不同,又为何这样设计,在繁杂的语法中找出本质的东西。

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://github.com/mu-qing/JavaScript-advanced/blob/master/src/%E4%BB%80%E4%B9%88%E6%98%AFJS.md

 

posted @ 2019-03-19 17:33 全凭一口仙气儿活着 阅读(...) 评论(...) 编辑 收藏