javascript的闭包的形成

  //例子1  
        var a = 10086;
        function f1() {
            alert(a);
        }
        f1(); //999

    //例子2:函数内部变量声明的时候,必须要用var  否则实际是声明了一个全局变量 
        function f2() {
            var b = 10086;
        }
        f2();
        alert(b); //errer :b为定义 
      
        //例子3:例如c为全局变量 
        function f3() {
            c = 10086;
        }
        f3();
        alert(c);//

        //==========================
        //例子2情况 我们需要访问b的值的时候怎么办呢
        //这个时候f4内的所有变量对于getd都是可见的,但getd中的变量对f4却不可见 ,这样我们的f4函数就形成了闭包了。
       //例子4 
        function f4() {
            var d = 10000;
            function getd() { 
                alert(d);
            }
            return getd();
        }
        
//        闭包的定义:简单的可以理解为定义在函数内部的函数
//        闭包的用途:读取函数内部的变量,让变量的值保持在内存中
 //例子5
        function f5() {
            var n = 100086;
            Add = function () { n += 1 };
            function getn() {
                alert(n);
            }
            return getn;
        }

       //这样调用的时候不会出现闭包的情况  
        f5();//这里输出10086
        Add();
        f5();//10086

        //用fun变量,形成闭包
        var fun = f5();//使用fun指向getn
        fun();
        Add();
        fun();
        //当执行 var fun=f5() 时,变量fun实际指向了函数getn,getn中用到了变量n
        //当函数f5内部的函数getn被函数a外部变量引用的时候,就创建了一个闭包 
        //闭包的作用:在a执行完后并返回,闭包由于变量n被外部引用,导致资源不会被回收,所以n始终存在,如果我们返回的不是getn,那么n的值不会被调用,就会被回收

 

参考文章

揭开Javascript闭包的真实面目    

学习Javascript闭包(Closure)

posted @ 2013-03-13 15:25  张巍的博客  阅读(1233)  评论(0编辑  收藏  举报