JS概述
浏览器的功能
- 发起请求,下载 HTML,解析 HTML,下载 CSS,解析 CSS,渲染界面,下载 JS,解析 JS,执行 JS等
- 功能模块:用户界面、渲染引擎、JS引擎、存储等
这些模块一般各处于不同的线程
JS 引擎
- JS引擎的主要功能
- 编译:把JS代码翻译为机器能执行的字节码或机器码
- 优化:改写代码,使其更高效
- 执行:执行上面的字节码或者机器码
- 垃圾回收:把JS用完的内存回收,方便之后再次使用
执行 JS 代码
- 准备工作
- 提供API:window / document / setTimeout
这些功能都不是JS自身具备的功能,这些功能成为运行环境 runtime env
- 提供API:window / document / setTimeout
- 内存
当打开Chrome时,Chrome会占据一部分内存,同时辅助进程也会占据一部分内存
当打开页面时,同样占据内存,在页面中有以下部分会占据内存:
渲染线程、用户界面、JS引擎等- 在JS引擎中,分为代码区,环境和变量区和数据区
代码区存放代码,环境和变量区存放环境和变量,数据区存放数据 - 在数据区里包含 Stack 和 Heap
- 在JS引擎中,分为代码区,环境和变量区和数据区
Stack 和 Heap
数据区分为Stack栈和Heap堆
数据分为两种:非对象和对象
- Stack 特点:每个数据顺序存放,非对象都存在Stack
- Heap 特点:每个数据随机存放,对象都存在Heap
= 总是会把右边的东西复制到左边
注意
- window 变量和window 对象是不同概念,window 变量是一个容器,存放window 对象的地址,window 对象是Heap里的数据
- 同理,console和console对象,Object和Object函数对象 ,前者是内存地址,后者是内存
JS 原型链
- XXX.prototype 存储了 XXX 对象的共同属性 — 这就是原型
原型让你无需重复声明共有属性 - 每个对象都要一个隐藏属性 命名为 _ _ proto _ _
指向原型(对象) - prototype 和 _ _ proto _ _ 的区别
- 都存着原型的地址
- prototype 挂在函数上
- _ _ proto _ _ 挂在每个新生成的对象上