一些概念
- 执行栈
执行环境栈(ECStack)。JS引擎执行代码时,首先创建执行环境栈。 - 执行上下文(EC)
每个域下的代码执行,都有自己的执行上下文。
分为全局执行上下文、函数执行上下文。 - 全局对象(GO)
实际是一块堆内存,浏览器会把内置属性、方法放在里面。在浏览器中,会把全局对象赋值给window。
在Node中不然。 - 栈内存
负责执行代码,存储基本类型值 - 堆内存
负责存储引用类型值(对象键值对、函数中代码、属性方法) - 变量对象(VO)
存放当前上下文中存放创建的变量和值的地方,每个上下文中都有一个自己的VO。(函数私有上下文中叫AO,活动变量对象,是VO的一个分支)
栈内存
让我们通过一个简单的栗子来康康栈内存是如何工作的~
面试题1
let a = 12;
let b = a;
b = 13;
console.log(a); //输出12
变量赋值三部曲(以let a = 12为例):
① 创建值,基本类型值直接在栈中创建和存储,12;引用类型值见后。