代码改变世界

闭包

2012-01-08 18:39  胡炯  阅读(175)  评论(0编辑  收藏  举报

什么是闭包

闭包的定义是,一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达是的一部分。 根据定义javascript中所有每个function都是一个闭包。 嵌套function所产生的闭包更为强大,也是我们通常所谓的闭包。

function a()
{
   var i = 0;
   function b()
   {
      alert(++i);
   }
   return b;
}
var c = a();
c();

作用和效果

闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。 1、保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。 2、在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。 3、通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)