2执行上下文

 <!--
        1.代码分类(位置)
            全局代码
            函数(局部)代码
        2.全局执行上下文
            在执行全局代码前window确定为全局执行上下文
            对全局数据进行预处理
                var定义的全局变量==》undefined,添加为window的属性
                function声明的全局函数==》赋值(fun),添加为window的方法
                this==>赋值(window)
            开始执行全局代码
        3.函数执行上下文
            在调用函数,准备执行函数体之前创建(window上下文对象是已经有了,function需要创建)对应的函数执行上下文对象(并不是完全真实存在的,用完就消失,是个封闭独有的区域,函数外看不见)
            对局部数据进行预处理
                形参变量==》赋值(实参)==》添加为执行上下文的属性
                arguments===>赋值(实参列表),添加为执行上下文属性
                var定义的局部变量==》undefined,添加为执行上下文的属性
                function声明的函数==>赋值(fun),添加为执行上下文的方法
                this===>赋值(调用函数的对象
            开始执行函数体代码
<script>
    //全局执行上下文
    //首先变量提升,预处理
    //var a1 ;function a2,this=function 都放到window里  window就是执行上下文
    //执行a1的时候就去window里找,执行a2也去window里找
    console.log(a1,window.a1)

    window.a2()
    console.log(this)
    var a1=3
    function a2(){
        console.log('a2()')
    }
    //函数执行上下文
    function fn(a1){
        console.log(a1)//2  去执行函数上下文对象里找
        console.log(a2)//undefined 去执行函数上下文对象里找
        a3()//a3() 去执行函数上下文对象里找
        console.log(this)//window 去执行函数上下文对象里找
        console.log(arguments)//伪数组[2,3] 去执行函数上下文对象里找


        var a2=3
        function a3(){
            console.log('a3()')
        }
    }
    fn(2,3)//要执行才会创建scope空间  没有fn()则不会创建空间,但不管执不执行都要准备要

</script>

 

posted @ 2019-11-07 20:36  燕子fly  阅读(88)  评论(0编辑  收藏  举报