美文网首页一本正经学前端
javascript的执行上下文—创建变量对象

javascript的执行上下文—创建变量对象

作者: 胡思乱想的Alice | 来源:发表于2017-04-12 15:51 被阅读12次

执行上下文的创建时机:
当调用一个函数时(激活),一个新的执行上下文就会被创建。
执行上下文的生命周期
一个执行上下文的生命周期可以分为两个阶段,创建阶段和执行阶段。
创建阶段:

Paste_Image.png

执行阶段:


Paste_Image.png

注意:在检查变量声明阶段,如果遇到同名的变量名时,则直接跳过。因为同名的变量名可能是在检查函数声明时创建的,跳过是为了避免覆盖掉已声明的函数。

举个小例子,看一下上下文从创建到执行的过程。

(function demo(){
    console.log("执行前a的值为:"+a);
    foo();
    function foo(){
        console.log("foo declare");
    }
    var foo = function(){
        console.log("foo expression");
    }
    foo();
    var a = 20;
    console.log("执行后a的值为:"+a);
})()

//结果:
执行前a的值为:undefined
foo declare
foo expression
执行后a的值为:20

解析

  1. 执行上下文创建:
demoEC = {
    // 变量对象
    VO: {},
    scopeChain: {},
    this: {}
}

创建变量对象阶段:

// VO 为 Variable Object的缩写,即变量对象
VO = {
    arguments: {...}, 
    foo: <foo reference>  // 表示foo的地址引用,var声明的foo变量会跳过不覆盖
    a: undefined
}
  1. 执行阶段:
VO->AO   //变量对象变为活动对象
AO={
    arguments:{...},
    foo:<foo reference> //函数表达式赋值
    a:20
}

执行顺序:

(function demo(){
    function foo(){
        console.log("foo declare");
    }
    var a;
    console.log("a执行前的值为:"+a);
    foo();
    foo = function(){
        console.log("foo expression");
    }
    foo();
    a = 20;
    console.log("a执行后的值为:"+a);
})()

相关文章

  • JS基础小记

    变量对象与基础数据类型 JavaScript的执行上下文生成之后,会创建一个叫做变量对象的特殊对象,JavaScr...

  • JavaScript_04变量对象

    变量对象。 上篇文章《JavaScript_03执行上下文栈》中讲过,当 JavaScript 代码执行一段可执行...

  • 如何确定js里的this

    在我的彻底理解js的执行上下文,以及变量对象中我说过,执行上下文是在函数被调用的时候被创建的,其中包括创建变量对象...

  • JavaScript深入之变量对象

    JavaScript深入系列第四篇,具体讲解执行上下文中的变量对象与活动对象。全局上下文下的变量对象是什么?函数上...

  • javascript的执行上下文—创建变量对象

    执行上下文的创建时机:当调用一个函数时(激活),一个新的执行上下文就会被创建。执行上下文的生命周期一个执行上下文的...

  • 3. 变量对象

    执行上下文的生命周期: 创建阶段。(创建变量对象,建立作用域链,确定this的指向)代码执行阶段。(变量赋值,函数...

  • 深入之从this

    当JavaScript代码执行一段可执行代码时,会创建对应的执行上下文。对于每个执行上下文,都有三个重要属性 变量...

  • javascript 执行环境,变量对象,作用域链

    执行环境 函数都会创建的执行环境,包括 变量对象,作用域链,上下文(this)。执行环境定义了变量或函数有权访问的...

  • 事件机制、执行上下文

    执行上下文 EC 理解:代码的执行环境 时机:代码正式执行之前会进入到执行环境 工作: 创建变量对象变量;函数及函...

  • 细读 JS | 执行上下文、作用域

    本文主要是深入 JavaScript 执行过程,覆盖了执行上下文、变量对象、作用域链、This、闭包等内容。 但文...

网友评论

    本文标题:javascript的执行上下文—创建变量对象

    本文链接:https://www.haomeiwen.com/subject/kqumattx.html