zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    sqlsever2008及以上各个安装包的说明
    解决 windows2012 下无法安装 sql2008R2
    dapper extensions (predicates)
    Dapper full example
    Dapper.ColumnMapper 的使用
    wms
    大端格式 与 小端格式
    mysql数据库引擎
    事务
    MySQL索引底层实现
  • 原文地址:https://www.cnblogs.com/ac1985482/p/2957719.html
Copyright © 2011-2022 走看看