o = {
a:1,
o:{
b:2,
f : function(){
alert(o.a);//1
alert(o.b);//undefined
}
}
}
o.o.f();
o = {
a:7,
o : {
a:1,
o:{
b:2,
f : function(){
alert(o.a);//7
alert(o.b);//undefined
}
}
}
}
o.o.o.f();
o = {//这个o加到window闭包里面去了
a:7,
o : {//这个o没有
a:1,
o:{//这个o没有
b:2,
f : function(){
alert(o.a);//7
alert(o.b);//undefined
}
}
}
}
o.o.o.f();
f = function(){
return {
a:1,
o:{
b:2,
f : function(){
alert(o.a);//o is not defined ,说明o不存在
alert(o.b);//o is not defined ,说明o不存在
}
}
}
}
f().o.f();
f = function(){
o = {a:7,b:8}
return {
a:1,
o:{
b:2,
f : function(){
alert(o.a);//7
alert(o.b);//8 return的东西不在闭包里面
}
}
}
}
f().o.f();
f = function(){
o= {//这个o加到函数闭包里面去了
a:1,
o:{//这个o没有
b:2,
f : function(){
alert(o.a);//1
alert(o.b);//undefined
}
}
}
return o;
}
f().o.f();
f = function(){
return {
a:1,
o:{
b:2,
f : function(){
o = {a:3,b:4}
alert(o.a);//3
alert(o.b);//4
}
}
}
}
f().o.f();
f = function(){
o = {a:5,b:6}
return function(){
a=1,
o={
b:2,
f : function(){
alert(o.a);//unudefined 以函数作为闭包层级,一层一层的向上查找,找到了就不找了
alert(o.b);//2
}
}
return o;
}
}
f()().f();
f = function(){
o = {a:5,b:6}
return function(){
a=1,
b={
b:2,
f : function(){
alert(o.a);//5
alert(o.b);//6
}
}
return b;
}
}
f()().f();
f = function(){
return function(){
o = {a:15,b:16}//加到闭包
a=1,
b={//加到闭包
o:{a:11,b:12}, //没有加到闭包
b:2,
f : function(){
alert(o.a);//15
alert(o.b);//16
}
}
return b;
}
}
f()().f();