全局执行上下文/函数执行上下文(局部)
先来总结下名词:
VO:全局变量对象
AO:活动对象 (也叫函数的变量对象)
GO:全局对象(window)
EC:执行环境
ECStack:执行环境栈(调用栈)
环境=上下文
每个执行环境有自己对应的变量对象,函数执行环境是把活动对象作为变量对象,在作用域中定义的变量保存在对应执行环境中的变量对象中(注意:执行环境本质上不等于作用域,但是二者是一 一对应关系)
全局执行环境
浏览器加载html页面,最先创建、进入的就是全局执行环境 (即创建执行环境,把该执行环境压入到ECStack中),全局执行环境中有对应的全局变量对象VO,还有一个全局对象GO,GO其实就是window对象,在全局作用域中定义的变量会保存在VO中,并且会映射为window对象属性或方法(let、const定义的变量不会被映射)
函数执行环境
问:函数已定义,但未执行,此时函数在哪?
答:在函数已定义,但是未调用前,函数老老实实躺在堆中保存着,为什么呢,就因为函数也是对象,既然是对象,那么就在堆中存储
问:函数在堆中怎么存储的?
答:键值对! 有属性名:属性值 这样的一对对键值对,比如name: “函数名” length: 参数个数 等等
问:函数的可执行代码在哪?
答&