解析时我用大括号代表作用域:
全局socoped:{
var a=fun(0)
socoped[fun(0)]:{
var n=0;
var o;
console.log(o)//打印undef
return {fun: function(m) {return fun(m, n)}}
socoped[a.fun(1)]:{
var m=1;
return fun(m, n)==> fun(1,0)
}
socoped[a.fun(2)]:{
var m=2
return fun(m, n)==>fun(2,0)
}
socoped[a.fun(3)]{
var m=3;
return fun(m, n)==>fun(3,0)
}
}
a.fun(1);
socoped[a.fun(1)--fun(1,0)]:{
var n=1
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
a.fun(2);
socoped:[a.fun(2)--fun(2,0)]{
var n=2
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
a.fun(3);
socoped:[a.fun(3)--fun(3,0)]{
var n=3
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
}
var b=fun(0).fun(1).fun(2).fun(3)
全局scoped:{
var b=fun(0)
scoped[fun(0)]{
var n=0
var o=undf
console.log(o)//打印undfined
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1)]{
var m=1
return fun(m, n)==>fun(1,0)
}
}
scoped[fun(0).fun(1)--fun(1,0)]{
var n=1
var o=0
console.log(o)//打印0
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1).fun(2)]{
var m=2
return fun(m, n)==>fun(2,1)
}
}
scoped[fun(0).fun(1).fun(2)--fun(2,1)]{
var n=2
var o=1
console.log(o)//打印1
return {fun: function(m) {return fun(m, n)}}
scoped[fun(0).fun(1).fun(2).fun(3)]{
var m=3
return fun(m, n)==>fun(3,2)
}
}
scoped[fun(0).fun(1).fun(2).fun(3)--fun(3,2)]{
var n=3
var o=2
console.log(o)//打印2
return {fun: function(m) {return fun(m, n)}}
}
}
转载:https://blog.csdn.net/cjx177187/article/details/125410694