JS作用域链

js对象有两种成员

一种是上文成员(js语法可以直接访问的成员)

一种是下文成员(底层语法访问的成员) [[scopes]]括起来的成员名 就是下文成员

[[scopes]]这个"对象"内部保存的就是函数的作用域

函数在定义/声明的时候 就有了[[scopes]] 里面保存了上层的AO对象

函数调用时生成AO对象 会把AO对象放在scopes

每次调用都会放在scopes顶部(理解为栈)

代码演示:


		<script>
			function a() {
				var aaa = 123;
				function b() {
					var bbb = 234;
					console.log(aaa);
				}
				return b;
			}

			var glob = 100;
			var demo = a();
			demo();

        /*
        作用域链解析:
        	Go:{a函数,glob:100,demo:b函数}
            用数组来模拟作用域链,越底层在越后面
            a.[[scopes]] ==>[AO(a):{aaa:123,b函数,},Go]
            b.[[scopes]] ==>[AO(b),AO(a)] ==>[AO(b):{bbb:234,打印aaa},AO(a):{aaa:123,b函数,},Go]
            打印aaa在作用域链中往下寻找,在我写这里就是往后寻找,打印123
        */
        </script>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值