Skip to content

堆栈内存

栈内存 ECStack

js 之所以能运行于浏览器,是因为浏览器给js提供执行环境,即栈内存。

堆内存

浏览器把内置的一些属性或方法,放在一个单独的内存(Heap,堆内存)中

全局对象 GO (Global Object)

  • 浏览器的 window 指向 GO
  • GO 存在于堆内存中

执行上下文 EC

  • 全局执行上线文(G)
  • 函数的私有执行上下文
  • 块级执行上下文 (ES6)

变量对象 VO(Variable Object)

  • 当前执行上下文中,存放b创建的对象和值的地方。
  • 每个执行上下文中,都有一个自己的变量对象,在私有执行上下文中,叫 AO(Active Object)

var a = 1

  1. 创建一个值
  2. 创建一个变量
  3. 让变量与值关联

创建一个值

  • 基本类型的值,直接存储在栈内存中
  • 引用类型的值,在堆内存中开辟空间存放内容,将地址放到栈内存中,供变量关联。

一个例子

var a = { n: 1 };
var b = a;
a.x = a = { n: 2 };

console.log(a);
console.log(b);