美文网首页
执行上下文

执行上下文

作者: 熬得萨菲 | 来源:发表于2020-02-06 19:53 被阅读0次

    预备知识:

    1.栈stack:先进后出
    栈是类似于数组的一种数据结构。
    
    2.对象引用:不是存放的数据,是地址,地址指向内存空间,内存空间里面存有数据
    

    执行上下文概念:

    执行上下文:某个函数或全局代码的执行环境,该环境中包含执行代码需要的所有信息。
    可以简单的理解为:执行上下文是一个对象,该对象中包含了执行代码所需要的信息。
    当执行一个函数时,需要建立执行上下文,建立后才开始正式执行。
    call stack(执行上下文栈):组织管理程序运行过程中的执行上下文。
    "只有"'调用'函数才能执行上下文(重点),执行栈管理执行上下文。
    

    执行上下文的内容:

    1.VO:variable object,变量对象,存放的是函数或全局代码执行过程中需要用到的局部变量
    2.scope:作用域
    3.this
    

    VO:

    想象:
    {
        vo:{},
        scope:{},
        this:{}
    }
    

    vo:是一个对象,调用函数或执行全局代码时创建,创建一个vo,需要经过三步:vo这也是变量声明提前的原因

    1.确定函数形参的值(包括arguments对象)
    2.确定函数中所有的函数字面量声明(function bar(){}),不是函数表达式
         2.1 该函数必须是字面量声明,也就是function bar(){},不能是函数表达式,字面量声明提取到vo执行后,可以认为该声明式,不存在了。
         2.2 如果当前vo中出现同名属性,直接覆盖。
    3.确定函数中所有的变量声明(var),将其提取到上下文中,值为undefined;
        3.1如果当前vo中出现同名属性,忽略;
    

    测试题:

        function foo(a,b){
        console.log(a,b,arguments);//a-fn,4, [a-fn,4]
        bar();
        function bar(){
            console.log("bar");//bar
        }
        function a(){
            
        }
        var i = 10;
        var j = 11;
        var k = 100;
        }
        foo(3,4);
        
        执行上下文建立过程:
        {
            vo(foo):{
                a:3,//会被a-fn覆盖,--> fn 
                b:4,
                arguments:{},//伪数组也会被覆盖
                bar:fn,
                i:undefined,
                j:undefined,
                k:undefined
                vo(bar):{//删除
                    console.log();//1.先执行完删除
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:执行上下文

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