函数的作用域链

全局预编译的时候,会创建一个GO对象,这个GO对象(global object)等于window,会在全局执行上下文对象,进行变量提升和函数声明提升。

 在函数预编译的时候,会创建一个AO对象(activation object),函数执行上下文对象,并且提升形参并且赋值以及各种声明的赋值。这时候,Scopes:函数的一个隐含属性,保存了执行上下文对象的集合,呈现 链式结构

举例:(注意:函数声明的优先级高于变量声明)

     var b = 456
        function f1(a) {
            console.log(a);
            var a = 123;
            function f2() {
                console.log(a);
                console.log(b);

            }
            f2();
        }


        f1(111)

GO:{

                b:undefined,

                f1:function f2() {

                console.log(a);

                console.log(b);

                }

            }

AO:{

                a:111,//形参赋值

                f2: function f2() {

                console.log(a);

                console.log(b);

            }

            }

练习:列出一下代码的GO对象和AO对象

console.log(test);//f
        function test(test) {
            console.log(test);//f
            var test = 234;
            console.log(test);//234
            function test() { }
        }
        test(1);
        var test = 123;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值