JS中的堆(Heap)栈(Stack)内存
都是在计算机内存中开辟的空间
-
栈内存 Stack:ECStack(Execution [ˌeksɪˈkjuːʃn] Context Stack)
- 存储原始值类型值
- 代码执行的环境
-
堆内存 Heap:
- 存储对象类型值
EC(Execution [ˌeksɪˈkjuːʃn] Context )执行上下文:区分代码执行的环境
-
常见上下文分类:
- 全局上下文 EC(G)
- 函数私有上下文 EC(?)
- 块级私有上下文 EC(BLOCK)
-
产生私有上下文 -> 进栈执行 -> 出栈释放(可能释放)
-
变量对象:当前上下文中,用来存储声明的变量的地方
- VO(Varibale Object):VO(G) 或者 VO(BLOCK)全局变量对象
- AO(Active Object):AO(?)
GO(Global Object)全局对象
- window 指向 GO 对象
- 全局上下文中,基于var/function声明的变量是直接存储到GO对象上的;而基于let/const声明的变量才是存放在VO(G)中的;
let 变量 = 值 的操作步骤
-
第一步:创建值
-
原始值类型:直接存储在栈内存中,按值操作
-
对象类型值:按照堆内存地址来操作
-
对象:开辟一个堆内存空间(16进制地址)、依次存储对象的键值对、把空间地址赋值给变量
-
函数:内存空间中存储三部分信息
- 作用域 [[scope]]:当前所处上下文
- 函数体中的代码字符串
- 当做普通对象存储的静态属性和方法「name & length」
-
-
-
第二步:声明变量 declare
-
第三步:变量和值关联在一起(赋值) defined