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]]]