代码之家  ›  专栏  ›  技术社区  ›  Willem van der Veen

关于闭包的Javascript执行上下文

  •  0
  • Willem van der Veen  · 技术社区  · 7 年前

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

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

    1. 全局执行上下文:JS代码开始执行的默认执行上下文。
    2. 函数执行上下文:通过在函数内执行代码创建的上下文。如果调用函数,则将上下文放在全局执行堆栈上。
    3. 评估:内部 eval() 作用

    执行上下文是一个堆栈,其中可以将项推送到堆栈上(如果调用新函数)并弹出堆栈(当函数返回时)。

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

    1. 创建阶段
    2. 执行阶段

    在创建阶段,JS引擎调用了一个函数,但尚未开始执行。在创建过程中,会发生3个事件:

    1. 创建激活对象:激活对象是一个特殊的对象,它包含所有变量、函数参数和内部函数声明信息。
    2. 范围链的创建:当前函数所在的所有变量对象的列表。
    3. 此值已确定

    我想这就是Javascript中闭包的形成方式。

    谁能清楚地解释一下 activation object 和a variable object 这与闭包有什么关系?

    1 回复  |  直到 7 年前
        1
  •  0
  •   simbathesailor    7 年前

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

    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 returned.

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