zoukankan      html  css  js  c++  java
  • jquery10 闭包示例

    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();
  • 相关阅读:
    对象形式传递
    解决DLNA方案的技术框架
    关于DLNA
    MAC配置Xcode的Cocos2d-x环境
    什么叫做双缓冲?
    Window7 Cocos2d-x配置开发环境
    Windows 8.1 Update 2更新了什么?
    微软发布Windows Phone 8.1 Update 和中文版Cortana“小娜”
    大开眼界 游览Facebook香港办公室
    小米的“假照片”危机
  • 原文地址:https://www.cnblogs.com/yaowen/p/6917034.html
Copyright © 2011-2022 走看看