一.进程与线程

打开浏览器

  1. .chrome.exe
  2. 双击chrome图标,运行chrome.exe文件
  3. 开启chrome进程,作为主进程
  4. 主进程会开启一些辅助进程,如网络服务,GPU加速
  5. 每新建一个网页,就有可能会开启一个子进程

浏览器的功能(面试)

  1. 发起请求,下载HTML,解析HTML,下载CSS,解析CSS,渲染界面,下载JS,解析JS,执行JS等
  2. 功能模块:用户界面,渲染界面,JS引擎,存储等
  3. 上面功能模块一般处于不同的线程

二.JS引擎

1.JS引擎举例

Chrome用的是V8引擎,C++编写

2.主要功能

  1. 编译:把JS代码翻译为机器能执行党的字节码或者机器码
  2. 优化:改写代码,使其更高效
  3. 执行:执行上面的字节码或者机器码
  4. 垃圾回收:把JS用完的内存回收,方便之后再次使用

三.内存图

image.png
内存会被瓜分为,操作系统占用的系统内存,chrome浏览器以及辅助进程瓜分,每个tab是一个打开的页面,
而每个tab会分为:渲染线程,用户界面,Js引擎占用的内存,此外,每个tab还有代码区,以及一些系统方面的未知的内存,还有stack和heap

堆区和栈区,和stack和heap:
stack顺序存放
heap随机存放

规律:
数据分为两种:对象和非对象
对象都放在heap 堆区,对象有:数组,函数,
非对象都放在stack栈,非对象的有三个:数字,字符串,布尔

四.JS入门之原型

image.png
在写代码之前至少有以下五个:

  1. console
  2. document
  3. 对象object
  4. 数组
  5. 函数

都挂在window上

用console.dir(window.Object)打出结构

一张图来表示:image.png
window有三个属性:console,Object,Array

细节:

  1. 关于window
    1. window变量和window对象是两个东西
    2. window变量是一个容器,存放window对象的地址
    3. window对象是heap里面的一堆数据
  2. 同理
    1. console和console对象不是同一个东西
    2. Object和Object函数对象不是同一个东西
    3. 前者是内存地址,后者是一堆内存

五.原型,也叫共有属性

三座大山:原型,this,ajax

image.png
所有的对象都有隐藏属性
只关心小写开头对象的隐藏属性,暂时不研究大写开头对象的隐藏属性

prototype和proto区别是:
都放着原型的地址,
但是prototype挂在函数上,大写
proto挂在每个新生成的对象上