首页 文章

关于闭包的Javascript执行上下文

提问于
浏览
0

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

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

  • 全局执行上下文:JS代码开始执行的默认执行上下文 .

  • 功能执行上下文:由函数内部代码执行创建的上下文 . 如果调用函数,则将上下文放在全局执行堆栈上 .

  • Eval:在 eval() 函数内 .

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

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

  • 创作阶段

  • 执行阶段

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

  • 激活对象的创建:激活对象是一个特殊对象,它包含所有变量,函数参数和内部函数声明信息 .

  • 范围链的创建:当前函数所在的所有变量对象的列表 .

  • 确定此值

我想这就是在Javascript引擎盖下形成闭包的方式 .

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

1 回答

  • 0

    变量对象(VO)是所有父作用域的数组 . 因此,每当查找变量值时 . 它首先在Active Object中查找 . 如果该值在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的内部结构 . 如果我错了,我愿意纠正自己

相关问题