栈内存(ECStack):提供代码执行的环境
JS之所以能够在浏览器中运行,是因为浏览器给JS提了执行的环境
- 浏览器会在计算机内存中分配一块内存,专门用来供代码执行的(执行环境栈)
- 每打开一个网页都会形成一个全新的执行环境栈
堆内存: 存放东西(存放的是属性方法)
全局对象 GO(Global Object)
浏览器中会把内置的属性和方法放到一个单独的 堆内存
- 任何堆内存都有一个内存地址(十六进制),方便后期找到这内存
- 浏览器端会让
window指向GO - Node 端会让
global指向GO
执行上下文(EC):代码自己执行所在的环境
- 全局的执行上下文 EC(G)
- 函数中的代码都会在一个单独的私有的执行上下文中处理
- 块级执行上下文
变量对象 VO (Varibale Object)
变量对象:在当前的上下文中,用来存放创建的变量和值得地方(每一个还行上下文中都会有一个自己的变量对象)
- 函数私有上下文中叫做 AO(Active Object)
- AO 属于 VO 的一个分支
数据存储
- 基本数据类型的值是存放在栈内存中的
- 引用数据类型值是先开辟一个堆内存,把东西存储进去,然后把地址放到栈中供变量关联使用
var a = 12 是如何操作的?
所有的指针赋值都是指针的关联指向
- 创建一个值
- 创建一个变量
- 让变量和值关联在一起
作用域
JS中存在多种作用域(全局、函数私有的、块级私有的)代码执行之前,首先会形成自己的执行上下文,然后把上下文进栈,进栈后,在当前上下文中再去以此执行代码