JS笔试题--作用域链分析

			function fun(n, o) {
				console.log(o)
				return {
					fun: function(m) {
						return fun(m, n);
					}
				};
			}
			var a = fun(0);   
			a.fun(1);
			a.fun(2);
			a.fun(3);
			var b = fun(0).fun(1).fun(2).fun(3);
			var c = fun(0).fun(1);
			c.fun(2);
			c.fun(3);

GO{fun函数,a:fun(0),b:fun(0).fun(1).fun(2).fun(3),c:fun(0).fun(1)}
fun.[[scopes]]=>[,GO]
a = fun(0)这行代码执行后:
生成了新的AO=>{n:0,o:undefined,打印undefined,fun(m)函数}
fun(m).[[scopes]]=>[fun(n,o).[[scopes]]]
a=fun(m)方法
a.[[scopes]]=>[n:0,o:undefined,fun(m)方法]
a.fun(1)=>AO1=>{n:1,o:0,打印0,fun(m)方法}
a.fun(2)=>AO2=>{n:2,o:0,打印0,fun(m)方法}
a.fun(3)=>AO3=>{n:3,o:0,打印0,fun(m)方法}
b = fun(0).fun(1).fun(2).fun(3);执行后
fun(0)=>AO1{n:0,o:undefined,打印undefined,fun(m)方法}
b.[[scopes]]=>[AO1,fun.[[scopes]]=>[,GO]]
fun(n,o).fun[[scopes]]=>[b.[[scopes]]]
fun(0).fun(1)=>AO2{n:1,o:0,打印0,fun(m)方法}
b.[[scopes]]=>[AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(n,o).fun[[scopes]]=>[AO=>{m:1},b.[[scopes]]]
fun(0).fun(1).fun(2)=>AO3{n:2,o:1,打印1,fun(m)方法}
b.[[scopes]]=>[AO3,AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(n,o).fun[[scopes]]=>[AO=>{m:2},AO=>{m:1},b.[[scopes]]]
fun(0).fun(1).fun(2).fun(3)=>AO4{n:3,o:2,打印2,fun(m)方法}
b.[[scopes]]=>[AO4,AO3,AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(n,o).fun[[scopes]]=>[AO=>{m:3},AO=>{m:2},AO=>{m:1},b.[[scopes]]]
c = fun(0).fun(1);执行后
fun(0)=>AO1{n:0,o:undefined,打印undefined,fun(m)方法}
c.[[scopes]]=>[AO1,fun.[[scopes]]=>[,GO]]
fun(0).fun[[scopes]]=>[c.[[scopes]]]
fun(0).fun(1)=>AO2{n:1,o:0,打印0,fun(m)方法}
c.[[scopes]]=>[AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(0).fun[[scopes]]=>[AO{m:1},c.[[scopes]]]
c.fun(2)=>fun(0),fun(1).fun(2)=>AO3{n:2,o:1,打印1,fun(m)方法}
c.[[scopes]]=>[AO3,AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(0).fun(1),fun[[scopes]]=>[AO{m:2},AO{m:1},c.[[scopes]]]
c.fun(3)=>fun(0),fun(1).fun(3)=>AO3{n:3,o:1,打印1,fun(m)方法}
c.[[scopes]]=>[AO3,AO2,AO1,fun.[[scopes]]=>[,GO]]
fun(0).fun(1),fun[[scopes]]=>[AO{m:3},AO{m:1},c.[[scopes]]]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H5_ljy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值