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();