一、进程和线程
以打开chrome.exe为例
1.双击Chrome图标,就会运行Chrome.exe文件
2.开启Chrome进程,作为主进程
3.主进程会开启一些辅助过程,如网络服务、CPU加速,这些是线程
4.每新建一个网页,就有可能开启一个子进程
https://www.huaweicloud.com/articles/d90c9bf248c8f1731946d65786c95379.html
二、浏览器的功能
1.发起请求,下载html,解析html,下载css,解析css,渲染界面,下载js,解析js,执行js
2.功能模块:用户界面,渲染引擎,js引擎,存储
3.功能模块一般处于不同的线程
js是单线程的,因为每个页面只能打开一个js线程 DOM操作慢,因为跨线程
三、JS引擎
功能
1.编译:用js代码翻译为机器能执行的字节码或机器码
2.优化:改写代码,使其更高效
3.执行:执行上面的字节码或机器码
4.垃圾回收:把js用完的内存回收,方便之后再使用
js在内存中运行
阴影部分
1.作用
- 用来存储数据
- 不存在变量名,变量名在【不知什么区】
- 每种浏览器的分配规则不一样
2.stack(栈)和Heap(堆)
stack:每个数据顺序存放
heap:每个数据随机存放
3.举例
var a=1;
var b=1;
var person={
name:'frank',
child:{
name:'jack'
}
}
var person2=person
person2.name='x'
console.log(person.name) //x
数据分两种,对象和非对象,非对象在stack中,对象存储在heap
四、js世界
1.js所需要的东西
Window,由浏览器提供
- console(控制台)
- document
- 对象Object
- 数组Array
- 函数Function
2.window内存图
3.原型链
```javascript var obj={} obj.toString()
//obj有一个隐藏属性,存储了Object.prototype对象的地址,包括有toString
var obj2={} obj2.toString() ``` obj1和obj2的关系
- 都可以调用toString
- 地址不同