Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146454
  • 博文数量: 103
  • 博客积分: 1897
  • 博客等级: 上尉
  • 技术积分: 1717
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 21:02
文章分类

全部博文(103)

文章存档

2013年(19)

2012年(84)

分类: Python/Ruby

2012-11-11 18:38:25

  闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义。闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。闭包的最典型的应用是实现回调函数(callback)。
  例如  在javascript

点击(此处)折叠或打开

  1.   function a(){   
  2.      var i=0;   
  3.      function b(){  
  4.     alert(++i);  
  5.             }   
  6.         return b;   
  7.        }  
  8.  var c = a();  
  9.  c();
 在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
  闭包的应用场景
  1、保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。   
    2、在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。   
以上两点是闭包最基本的应用场景,很多经典案例都源于此。


阅读(1227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~