堆栈内存
栈内存 ECStack¶
js 之所以能运行于浏览器,是因为浏览器给js提供执行环境,即栈内存。
堆内存¶
浏览器把内置的一些属性或方法,放在一个单独的内存(Heap,堆内存)中
全局对象 GO (Global Object)¶
- 浏览器的 window 指向 GO
- GO 存在于堆内存中
执行上下文 EC¶
- 全局执行上线文(G)
- 函数的私有执行上下文
- 块级执行上下文 (ES6)
变量对象 VO(Variable Object)¶
- 当前执行上下文中,存放b创建的对象和值的地方。
- 每个执行上下文中,都有一个自己的变量对象,在私有执行上下文中,叫 AO(Active Object)
var a = 1¶
- 创建一个值
- 创建一个变量
- 让变量与值关联
创建一个值¶
- 基本类型的值,直接存储在栈内存中
- 引用类型的值,在堆内存中开辟空间存放内容,将地址放到栈内存中,供变量关联。
一个例子¶
var a = { n: 1 };
var b = a;
a.x = a = { n: 2 };
console.log(a);
console.log(b);