一、五大浏览器与其内核(记住)
ie浏览器 trident
Chrome浏览器 webkit --> blink
Safari浏览器 webkit
Firefox gecko
Opera presto
二、浏览器的发展历史
1. 1990年,蒂姆·博纳斯·李
蒂姆博纳斯李是一个分享超文本资讯的人,他开发了一款浏览器world wide web,随后移植到C,改名为libwww(真正意义上的第一个浏览器),随后一系列变迁改为nexus。
2. 1993年(重要的MOSICA浏览器)
美国伊利诺大学NCSA组织,其核心成员马克·安德森开发了一个MOSIAC浏览器。该浏览器可以显示图片。该款浏览器是真正意义上的图形化浏览器。
3. 1994年(Netscape浏览器)
这一年,马克·安德森和吉姆·克拉克成立了MOSIAC communication corporation公司,但是因为商标等问题(商标被转让给了spy glass),改名为Netscape communication corporation。也就是我们熟知的网景公司。
随后的网景公司在MOSIAC的基础上开发了一款浏览器netscape navigator,在当时十分流行,一直流行了10年左右。
4. 1996年(极其重要的一年)
4.1 微软收购了spy glass公司,因为spy glass公司有MOSIAC的商标,当然就有MOSIAC的使用权。于是在MOSIAC的基础上开发出IE浏览器。Internet explorer 1.0版本。同年发布了IE3版本,并且发布了JScript脚本语言。由此可知,IE的内核其实MOSIAC内核的升级版。
4.2 网景公司Brendan eich基于Netscape navigator浏览器开发出livescript脚本语言。livescript就是JavaScript的前身。
4.3 Java火起来了,但是网景公司的livescript不温不火。于是网景公司和SUN公司(Java的公司)就商量一起合作推广和宣传产品。于是乎,livescript就更名为JavaScript了。
5. 2001年
5.1 IE6发布,同时将JS引擎诞生,从渲染引擎中剥离出来。
5.2 xp系统诞生。
6. 2003年
Mozilla公司开发了Firefox浏览器,其实就是Netscape navigator搬过来的。(2002年,Netscape开源了)
7. 2008年(极其重要的一年)
Google基于WEBKIT、BLINK、GEARS内核,开发出了Chrome浏览器。同时诞生了V8引擎。(JS引擎)。
V8引擎的厉害之处:
1、直接翻译机器码
2、独立于浏览器运行
8. 2009年
甲骨文公司收购了SUN公司,JS的所有权归甲骨文所有。
三、ECMA(European Computer Manufactures Association,欧洲计算机制造联合会)
- 该组织做什么?
评估、开发、认可电信、计算机标准 - ECMA - 262是脚本语言的规范,也称ECMAScript
我们常见的ES5、ES6也都是规范。
四、编程语言
- 解释型语言
源码 --> 解释器 --> 解释一行就执行一行 - 编译型语言
源码 --> 编译器 --> 机器语言 --> 可执行文件 - 脚本语言(解释型语言)
源码 --> 脚本引擎 --> 解释器
前端脚本语言:JavaScript(客户端脚本)
后端脚本语言:php(服务器端脚本)
五、关于其他的前端脚本语言
- 前端主流的脚本语言是JavaScript,之前其实还有JScript、VBScript。JScript和VBScript都是微软开发的脚本语言。因为脚本语言需要一个统一的规范,所以就共同遵守ECMA的规范。
- 但是JScript的语法基本上都是照抄JavaScript的,所以JScript和JavaScript基本一样。现在JScript已经放弃了。
- VBScript之前有用来做桌面程序。也基本没什么人用了。
- actionscript,用来开发Adobe flash player的。
六、JavaScript三大块
ECMAScript、DOM(W3C规范)、BOM(没有规范)
七、JavaScript单线程模拟多线程(轮转时间片)
JS引擎是单线程的,这个毫无疑问,那么为什么我们看上去好像能同时执行多个任务呢?因为JS引擎使用了轮转时间片来模拟多线程。
轮转时间片:短时间之内轮流执行多个任务的片段。
1、任务1、任务2、任务3…
2、切分这些任务
3、随机排列这些任务片段,组成队列
4、按照这个队列顺序将这些任务片段送进去JS进程
5、JS进程执行一个又一个的任务片段
因为短时间内执行了很多个任务片段,我们时间很短,我们是看不见卡顿的。
八、JavaScript基础
一个编程语言必须要有变量、数据结构、函数、运算能力等方面。HTML、CSS都没有这些,所以他们是标记性语言。
1.变量
1、普通声明方式:var a = 3;
说明:上面这条语句其实有两个步骤,声明变量a,变量赋值3。其实就像我们买房子,声明变量的时候就是向系统申请了一片存储空间,并且命名为a。赋值就是人住进去了。
2、单一声明方式:一个var声明多个变量。多个变量间用逗号分隔。
var x = 1,
y = 2;
3、命名规范
1、不能以数字开头,可以字母_KaTeX parse error: Expected group after '_' at position 17: …头 2、中间可以使用数组、字母_̲
3、关键字、保留字不能声明为变量的名字
4、注意要语义化、结构化
5、养成良好的规范,使用小驼峰命名法
6、不要使用拼音!很让人讨厌
2. JS的值
1、原始值(基本数据类型):
Number、String、Boolean、undefined、null
扩展一点:JavaScript是根据赋予的值自动来判断数据类型的,是一种动态语言、弱类型语言。
动态语言 -> 脚本语言 -> 解释型语言 -> 弱类型语言
静态语言 -> 编译型语言 -> 强类型语言
2、引用值:
Object、Array、Function、Date、RegExp
3. 原始值和引用值在内存中的存储方式
1、原始值是直接在栈内存中存值,比如var a = 123; 直接就会将栈内存中的某个地址空间放入123,并且声明为a。
2、在内存中的值是不能改变的。如果a被重新赋值,如a = 456,那么在栈内存中原理123的位置的声明a抹去,改回原来的地址序号。然后在其他的序号重新开辟一片空间来放456,并将该空间声明为a。
3、引用数据类型则不一样。引用数据存储在堆内存中。然后在栈的某个地址声明arr1,然后值为arr1的值在堆内存中的地址。
4、所以如果引用类型直接赋值,如var arr2 = arr1;那么是直接将arr1存放数据的堆内存空间地址直接复制一份放到arr2中。所以arr1改变值时,arr2同时也会被改变,因为他们指向同一个堆内存地址。
5、如果arr1 = [1, 2, 3],就是arr1被重新赋值了,那么原来的地址声明就会被抹去,然后开辟一个新的栈内存空间,存放[1, 2, 3] 在堆内存中的地址。