注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

薛沛然 廊坊师范学院 九期信息技术提高班

无脑地生活,像白痴一样成长,不给自己留感伤的时间。。。

 
 
 

日志

 
 

初识javascript闭包  

2014-01-16 22:09:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       刚刚接触javascript,学习了很多概念,但是对一些具有javasript特色的东西仍然搞不明白。上网查阅资料,进行了一些拓展,有所收获。

        闭包的定义

       百度百科中说子函数可以使用父函数中的变量,这种行为就叫做闭包。举个例子来说

         var scope ="global scope";                  //全局变量

         function checkscope(){

        var scope ="local scope";                      //局部变量

        function f() { return scope;}

        return f();

        }

       checkscope()

       子函数f()使用了checkscope()中的变量,结果是"local scope",所以这种嵌套行为称之为简单的闭包。

     闭包的作用

     从定义中可知f()使用了checkscope()的变量。但值得注意的是,上面的例子声明了两个变量。使用闭包的结果就是在函数体外调用了局部变量。(javascript中,写在方法内的是局部变量,写在方法外的是全局变量)。因此闭包的功能之一就是可以使程序调用方法内的局部变量。

     在网上浏览了大神阮一峰的博客,他提出了闭包的第二个作用:让变量保存在内存中。为了理解他的意图,我们同样举个例子。

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();

  result(); // 1000

按照常理来说当一个局部变量在方法中被声明,只要当方法结束,它也就会消失在内存中,不再存在。但是上面这个例子,把f1()的结果赋给了一个全局变量,也就等于把f2()赋给了一个全局变量,但是在javascript中子方法是依赖父方法的,因此,f1也就变成了一个全局变量,从而留在了内存中。所以,当我们第二次调用nAdd的时候,n的值仍然存在。

闭包的弊端

因为它能使声明在方法内部的局部变量被外界所知晓,所以也就极大地增加了信息泄露的风险。同时,因为能让已经使用过的变量继续留在内存中,又增大了系统的负担。
    
  评论这张
 
阅读(148)| 评论(12)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017