JS内存图和JS世界
1、浏览器的功能:
发起请求,下载HTML,解析HTML,下载CSS,解析CSS,渲染界面,下载JS,解析JS,执行JS等。
2、浏览器的功能模块
用户界面、渲染引擎、JS引擎、存储等,这四个功能模块不是进程,是线程
- 渲染引擎:解析HTML,解析CSS,渲染界面
- JS引擎:解析JS,执行JS
- 一个页面打开一个渲染引擎线程和一个JS引擎线程
- JS是单线程的
为什么JS引擎会有渲染的效果?
- 因为JS引擎会跨线程通信到渲染引擎,所以DOM操作慢,因为是跨线程操作,JS引擎跨越到渲染引擎
3、JS引擎的主要功能:
- 编译:把JS代码翻译为机器能执行的字节码或机器码
- 优化:改写代码,使其更高效
- 执行:执行上面的字节码或者机器码
- 垃圾回收:把JS用完的内存回收,方便之后再次使用
注意: window/document/setTimeout 不是JS提供的,是浏览器提供给JS的功能,我们把这些功能称为运行环境(runtime env)
4、内存图
-
stack栈
- 特点:每个数据顺序存放
- 用于存放非对象:数字、字符串、布尔
-
heap堆
- 特点:每个数据随机存放
- 用于存放对象:数组、函数
-
window变量和window对象是两个东西
-
window变量是一个容器,存放window对象的地址
-
window对象是Heap里的一坨数据
-
console和console对象不是同一个东西
-
Object和Object函数对象不是同一个东西,前者是内存地址,后者是一坨内存
5、JS的三座大山:this、原型、AJAX
6、原型链
- 首字母大写的对象,属性中就会包含
prototype
属性,如Object、Array - 首字母小写对象拥有隐藏属性:
__proto__
prototype
和__proto__
的共同点:里面都存放着原型的地址prototype
和__proto__
的区别:prototype
存放在首字母大写的函数中,__proto__
存放在小写的对象中- 当有两层链接时,不会修改(画图可知)如:
var obj = {};
var obj2 = {};
obj.toString='xxx'
obj2.toString = function toString()
7、原型图实例

转载自:https://juejin.cn/post/6844904114959155208