浏览器要js执行代码:
- 从电脑内存中分配一块内存,用来执行代码(栈内存=> stack)
- 分配一个主线程,用来自上而下执行js代码
栈内存
- 变量存储空间
- 值存储空间(存放基本数据类型和内存地址)
堆内存
- 存储的是复杂数据类型(例如对象的键值对)
例如1:let a = 12执行的过程
-
创建变量a,并放到当前的栈内存的“变量存储空间”
-
创建一个值12,并把值存到当前的栈内存的“值存储空间”
-
赋值,就是变量和值关联的过程。 例如2:
let b = {name: '内容1'}执行的过程 -
创建变量b,并放到当前的栈内存的“变量存储空间”
-
在内存中分配一块新的内存,用来存储引用类型值(堆内存 => heap),存有十六进制地址。
-
把对象中的键值对依次存到堆内存中。
-
地址也存到栈内存的“值存储空间”中
-
这样,堆内存地址和变量就关联起来了。