作用域链和执行期上下文

在JS里面:[[scope]]指的就是作用域,其中存储了运行期上下文的集合;
而作用域链是指:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接
执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数
下面上代码

        function a() {
            function b() {
                var b = 999;
                console.log(b);//这里b是999
            }
            var a = 123;
            b();
            console.log(a);//所以这里是123
            //console.log(b);//这里是a函数执行 打印b是函数体function b() {
                                            //              var b = 999;
                                            //          }
        }
        var glob = 100;
        a();
        // a defined  a.[[scope]]   0:GO{a:function() {},glob:100}
        // a doing  a.[[scope]]   0:AO{a:123,b:function() {}}  a的AO
        //                        1:GO{a:function() {},glob:100}
        // b defined  b.[[scope]]   0:AO{a:123,b:function() {}} a的AO
        //                          1:GO{a:function() {},glob:100}
        // b doing  b.[[scope]]   0:AO{b:999} b的AO
        //                        1:AO{a:123,b:function() {}}
        //                        2:GO{a:function() {},glob:100}

        function a() {
            function b() {
                var b = 999;
                a = 10;
                console.log(b);//这里b是999
            }
            var a = 123;
            b();
            console.log(a);//这里a是10
        }
        var glob = 100;
        a();

从上述代码可以看到在b函数执行完后,访问a,拿的就是a的AO(引用),在b执行后,a的值已经被改变成了10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值