阅读一些关于javascript执行上下文的文章 . 我现在的观点如下(如果我错了,请纠正我) .
执行上下文是执行JS代码的环境 . 执行上下文有三种类型:
-
全局执行上下文:JS代码开始执行的默认执行上下文 .
-
功能执行上下文:由函数内部代码执行创建的上下文 . 如果调用函数,则将上下文放在全局执行堆栈上 .
-
Eval:在
eval()
函数内 .
执行上下文是一个堆栈,其中可以在堆栈上推送项目(如果调用新函数)并弹出堆栈(返回函数时) .
JS引擎分两个阶段创建执行上下文:
-
创作阶段
-
执行阶段
在创建阶段,JS引擎调用了一个函数,但它的执行还没有开始 . 在创作过程中发生了3个事件:
-
激活对象的创建:激活对象是一个特殊对象,它包含所有变量,函数参数和内部函数声明信息 .
-
范围链的创建:当前函数所在的所有变量对象的列表 .
-
确定此值
我想这就是在Javascript引擎盖下形成闭包的方式 .
任何人都可以清楚地解释 activation object
和 variable object
之间有什么区别以及这与闭包有什么关系?
1 回答
变量对象(VO)是所有父作用域的数组 . 因此,每当查找变量值时 . 它首先在Active Object中查找 . 如果该值在AO中不可用 . 寻找VO具有定义的第一个VO元素 . 你可以把VO想象成
VO is iterated and if any varibale found with the same name, value is
returned.