关于闭包的Javascript执行上下文

时间:2018-02-22 15:18:39

标签: javascript closures

阅读一些关于javascript执行上下文的文章。我现在的观点如下(如果我错了,请纠正我)。

执行上下文是执行JS代码的环境。有三种类型的执行上下文:

  1. 全局执行上下文:JS代码开始执行的默认执行上下文。
  2. 功能执行上下文:通过在函数内执行代码而创建的上下文。如果调用函数,则将上下文放在全局执行堆栈上。
  3. Eval:在eval()函数内。
  4. 执行上下文是一个堆栈,其中可以在堆栈上推送项目(如果调用新函数)并弹出堆栈(返回函数时)。

    JS引擎分两个阶段创建执行上下文:

    1. 创作阶段
    2. 执行阶段
    3. 在创建阶段,JS引擎调用了一个函数,但它的执行还没有开始。在创作过程中会发生3个事件:

      1. 激活对象的创建:激活对象是一个特殊对象,它包含所有变量,函数参数和内部函数声明信息。
      2. 创建范围链:存在当前函数的所有变量对象的列表。
      3. 确定此值
      4. 我想这就是在Javascript中形成闭包的方式。

        任何人都可以清楚地解释activation objectvariable object之间的区别以及这与闭包有何关系吗?

1 个答案:

答案 0 :(得分:0)

变量对象(VO)是所有父作用域的数组。因此,每当查找变量值时。它首先在Active Object中查找。如果该值在AO中不可用。寻找VO具有定义的第一个VO元素。您可以将VO想象为

purrr

VO = [AO1,AO2, AO3, AO4] current Active object is AO All the AO are objects here lets say you look for the value of variable. VO is iterated and if any varibale found with the same name, value is

  

注意:我不太了解vo和Ao的内部结构。我很开心   如果我错了,请纠正自己