编译语言发展,JavaScript的起源,组成,应用,浏览器执行JS过程
1. 计算机语言
HTML是一种标记语言, CSS是一种样式语言
- 但本身都是属于计算机语言,因为都在和计算机沟通交流
在生活中两个人想要沟通, 必然是通过某一种语言(中文/英语/粤语/东北话) ,计算机语言就是人和计算机进行交流要学习的语言
网页的三大组成HTML,CSS,JavaScript
- JavaScript必然也是一种计算机语言

2. 编程语言
- 事实上,JavaScript可以对其有更加精准的说法:一种编程语言
- 计算机语言和编程语言的关系和区别
计算机语言(computer language):指用于人与计算机之间通讯的语言,是人与计算机之间传递信息的介质。但是其概念比通用的编程语言要更广泛。例如,HTML是标记语言,也是计算机语言,但并不是编程语言编程语言(programming language):是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧, 用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所应当采取的行动
- 编程语言的特点
- 数据和数据结构
- map集合/栈/队列/数组
- 指令及流程控制
- while/for/if/else/…
- 引用机制和重用机制
- 设计哲学
- 数据和数据结构
2.1. 常见的编程语言

2.2. 编程语言的发展历史
2.2.1. 机器语言
1 | 100011 00010 01111 0000 0000 0000 0000 |
计算机的存储单元只有0和1两种状态,因此一串代码要让计算机“读懂”,这串代码只能由数字0和1组成
像这种由数字0和1按照一定的规律组成的代码就叫机器码,也叫二进制编码
一定长度的机器码组成了
机器指令,用这些机器指令所编写的程序就称为机器语言优点
- 代码能被计算机直接识别,不需要经过编译解析
- 直接对硬件产生作用,程序的执行效率非常高
缺点
- 程序全是些0和1的指令代码,可读性差,还容易出错
- 不易编写(目前没有人这样开发)
2.2.2. 汇编语言
1 | push %ebp |
为了解决机器语言的缺陷而发明了汇编语言
这种语言用符号来代替冗长的、难以记忆的0、1代码
- mov/push指令,经过汇编器,汇编代码再进一步转成0101
优点
- 像机器语言一样,可以直接访问、控制计算机的各种硬件设备
- 占用内存少,执行速度快
缺点
- 第一,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性
- 也就是说,一个程序只能在一种机器上运行,换到其他机器上可能就不能运行
- 第二,符号非常多、难记
- 即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试
- 第一,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性
应用场景
- 操作系统内核、驱动程序、单片机程序
2.2.3. 高级语言
1 | const message = "Hello World"; |
最好的编程语言应该是什么? 自然语言
而高级语言, 就是接近自然语言, 更符合人类的思维方式
跟和人交流的方式很相似, 但是大多数编程语言都是国外发明的, 因为都是接近于英文的交流方式
优点
- 简单、易用、易于理解,语法和结构类似于普通英文
- 远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用熟悉硬件知识
- 一个程序还可以在不同的机器上运行,具有可移植性
缺点
- 程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上
- 种类繁多:JavaScript 、 C语言、C++、C#、Java、Objective-C 、Python等
2.2.4. 机器语言到高级语言

3. JavaScript的重要性
JavaScript是前端万丈高楼的根基
- 前端行业在近几年快速发展,并且开发模式,框架越来越丰富
- 但是不管学习的是 Vue,React,Angular包括 jQuery,以及一些新出的框架
- 他们本身都是基于JavaScript的
- 使用他们的过程中都必须好好掌握JavaScript
- 所以
JavaScript是前端万丈高楼的根基,无论是前端发展的万丈高楼,还是筑建自己的万丈高楼
JavaScript在工作中至关重要
- 无论使用什么技术,比如Vue,React,Angular,uniapp,taro,ReactNatice
- 也无论做什么平台的应用程序,比如 pc Web,移动端web,小程序,公众号,移动端App
- 都离不开JavaScript,并且深入掌握JavaScript不仅可以提高开发效率,也可以快速解决在开发中遇到的各种问题
- 面试时,往往会考察JavaScript的功底
前端的未来依然是JavaScript
- 在可预见的未来中,依然离不开JavaScript
- 目前前端快速发展,无论是框架还是构建工具,都像雨后春笋一样,琳琅满目
- 而且框架也会进行不断的更新,比如 Vue3,react18,vite2,TypeScript4.x
- 前端开发者面对这些不断变化的内容,往往内心会有很多的焦虑,但是其实只要深入掌握了JavaScript,这些框架或者工具都是离不开JavaScript的
4. 认识JavaScript
JavaScript是一门
高级的编程语言- 计算机本身只认识0/1的机器语言
- 编程语言作为高级语言,需要转换成机器指令才能在计算机上运行
JavaScript是一种运行在客户端的脚本语言
- 脚本语言:不需要编译,运行过程中由js引擎逐行来进行解释并执行
JavaScript可以基于node.js进行服务器编程
维基百科对JavaScript的定义
- JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言
JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程
HTML和CSS也是前端开发的重要组成部分, 而JavaScript是前端开发的灵魂
5. JavaScript的起源
1994年,网景公司(Netscape)发布了Navigator浏览器0.9版
- 这是历史上第一个比较成熟的网络浏览器,轰动一时
- 但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力
- 网景公司急需一种网页脚本语言,使得浏览器可以与网页互动
网景公司当时想要选择一种语言来嵌入到浏览器中
- 采用现有的语言,比如Perl、Python、Tcl、Scheme等等, 允许它们直接嵌入网页
- 1995年网景公司招募了程序员Brendan Eich,希望将
Scheme语言作为网页脚本语言的可能性
就在这时,发生了另外一件大事-1995年Sun公司将Oak语言改名为Java,正式向市场推出
- Java推出之后立马在市场上引起了轰动,Java当初有一个口号:”write once run anywhere”
- 网景公司动了心,决定与Sun公司结成联盟,希望将Java嵌入到网页中来运行
- Brendan Eich本人非常热衷于Scheme,但是管理层那个时候有点倾向于Java,希望可以简化Java来适应网页脚本的需求
但是Brendan Eich对此并不感兴趣,用10天时间设计出来了JavaScript
- 最初这门语言的名字是Mocha(摩卡)
- 在Navigator2.0 beta版本更名为LiveScript
- 在Navigator2.0 beta 3版本正式重命名为JavaScript,当时是为了给这门语言搭上Java这个热词
当然10天设计出来语言足够说明Brendan Eich是天才,但是这门语言当时更像是一个多种语言的大杂烩
- 借鉴
C语言的基本语法 - 借鉴
Java语言的数据类型和内存管理 - 借鉴
Scheme语言,将函数提升到”第一等公民“(first class)的地位 - 借鉴
Self语言,使用基于原型(prototype)的继承机制
- 借鉴
Brendan Eich曾经这样描述过JavaScript
- 与其说我爱Javascript,不如说我恨它,它是C语言和Self语言一夜情的产物
- 十八世纪英国文学家约翰逊博士说得好:“它的优秀之处并非原创,它的原创之处并不优秀”(the part that is good is not original, and the part that is original is not good.)
微软公司于1995年首次推出Internet Explorer,从而引发了与Netscape的浏览器大战
- 微软对Netscape Navigator解释器进行了逆向工程,创建了
JScript,以与处于市场领导地位的网景产品同台竞争 - 这个时候对于开发者来说是一场噩耗,因为需要针对不同的浏览器进行不同的适配
- 微软对Netscape Navigator解释器进行了逆向工程,创建了
1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准
1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262
- ECMA-262是一份标准,定义了ECMAScript语言
JavaScript成为了ECMAScript最著名的实现之一- 除此之外,ActionScript和JScript也都是ECMAScript的实现语言
ECMAScript只是对实现规范描述的所有方面的一门语言的称呼,JavaScript是ECMAScript的一种实现
5.1. ECMA
- 欧洲计算机制造商协会
- ECMA是个行业标准组织,它所通过的标准都是ECMA-nnn进行编号
- ECMA是ECMAScript规范下的JavaScript语言标准化机构
5.2. TC39
- TC39打造出来ECMA-262(ECMA脚本语言标准)
- TC39是ECMA国际组织第39技术委员会(Technical Committee),是ECMA的一部分
- TC39由网景,Sun,微软,Borland,Nombas,其他对该脚本语言感兴趣的公司代表构成,包括了阿里和字节
- TC39主要工作就是制定ECMAScript标准,标准生成流程,并实现
- 每两个月,TC39都会开会,会议记录在GitHub存储库中公开
- 除TC39外,ECMA国际组织还有TC43 Universal 3D(U3D),TC45 Office Open XML Formats 等等
6. JavaScript语言标准
6.1. ECMA-262
- 主标准,由ECMA负责管理
- 为了JavaScript和JScript能遵循同一套标准发展而诞生的ECMAScript
- 排到了作为ECMA的262号标准,因此得名ECMA-262
- ECMA-262定义了【语法,类型,语句,关键字,保留字,操作符,全局对象】
6.2. ISO/IEC16262
- 第二标准,由国际标准化组织(ISO,International Organization for Standardization)和国际电子技术委员会(IEC,International Electrotechnical Commission)负责管理
- 出于商标版权的原因,规范标准中将这门语言称为 ECMAScript,所以原则上 JavaScript 与 ECMAScript 指的是同一个东西,但有时也会加以区分
7. JavaScript的组成

7.1. javascript语法 ECMScript
- 由ECMA国际(原欧洲计算机制造商协会)进行标准化的一门编程语言
- ECMA-262将ECMAScript作为一个
基准,在它之上再构建更稳健的脚本语言 - ECMAScript是ECMA-262定义的语言,并不局限于Web浏览器
- Web浏览器只是ECMAScript实现可能存在的一种宿主环境,提供了ECMAScript的基准实现和与环境自身交互必需的环境
- 并且,ECMAScript没有输入和输出方法
- 这种语言在万维网上应用广泛,往往被称为JavaScript(网景公司)或JScript(微软公司)
- 但实际上两者都是ECMAScript语言的实现和扩展
ECMAScript规定了JS的编程语法和基础核心,是所有浏览器共同蹲守的一套js语法工业标准- ECMAScript发展

7.2. 页面文档对象模型 DOM
Document Object Model,是W3C组织推荐的处理可扩展标记语言的标准编程接口
通过DOM提供的接口可以对页面上的各种元素进行操作(大小,颜色,位置等)
DOM会将整个页面抽象为一组分层节点,通过创建表示文档的树,控制网页的内容和结构。删除,添加,替换,修改节点
1
2
3
4
5
6
7
8<html>
<head>
<title>Smaple Page</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
7.3. 浏览器对象模型 BOM
- Browser Object Model,浏览器对象模型,提供了独立于内容的,可以与浏览器窗口进行互动的对象结构
- 用于支持访问和操作浏览器的窗口
- HTML5中以正式规范的形式涵盖尽可能多的BOM特性:
- 弹出新浏览器窗口
- 移动,缩放,关闭浏览器窗口
- navigator提供浏览器信息
- location提供浏览器加载页面信息
- screen提供浏览器屏幕分辨率信息
- …
8. Atwood定律
- Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律
- Any application that can be written in JavaScript, will eventually be written in JavaScript.
- 任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现
9. JavaScript应用
9.1. web开发
- 原生JavaScript
- React开发
- Vue开发
- Angular开发
9.2. 移动端开发
- ReactNative
- Weex
9.3. 小程序端开发
- 微信小程序
- 支付宝小程序
- uniapp
- taro
9.4. 桌面应用开发
Electron
- VSCode就是Electron开发的
9.5. 后端开发
- Node环境
- express,koa,egg.js