日期:2014-05-16  浏览次数:20442 次

大家来说说闭包吧,闭包的好处有哪些,坏处有哪些为什么要用闭包
闭包会导致内存泄露为什么还要用闭包,不用闭包可不可以,
个人对闭包的理解是:“函数使用了函数外定义的变量了”
但是一般大家所说的闭包是指嵌套的函数么,如:
function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();

此时变量i和包括i的函数a一直未被回收,这样理解对么,谢谢大侠们指教,先谢过了!
javascript function 闭包 泄露 js闭包

------解决方案--------------------
写特效可以完全不用闭包。 有些时候要进行信息隐藏和封装可以使用闭包
------解决方案--------------------
函数要访问一个变量的时候,就会先从自己的作用域开始,逐步向外层函数的作用域寻找那个变量的值。简而言之就是外层函数不能访问内层,内层能访问外层。没什么大不了的,平时都在用,没想过里面的机制罢了。
像这样直接在script标签里定义函数大家都写过。name是公有变量。公有域是sayName函数的外层,所以能够访问,这个就是闭包。

var name = 'name';
function sayName () {
  alert(name);
}

换个复杂点的例子:
var person = (function() {
   var name = 'name';
   var person = {};
   function sayName() {
     alert(name);
   }
   person.sayName = sayName;
   return person;
})();

这个例子定义了一个person对象,这个对象有个sayName方法。调用person.sayName()会显示'name'。看上去person是在函数的外层,不应该能访问到函数里的name。但其实调用person.sayName()的时候,调用的是那个内部函数sayName,而内部函数能访问外部函数的变量。这个就是闭包的用处。
------解决方案--------------------
简单分析了下:
闭包的好处:
1.部分资源不需要一直存在(只在函数中出现)
2.数据不想被外部访问到(以免混淆)
坏处待分析//

------解决方案--------------------
可以模拟一些OO的特性
------解决方案--------------------
a 已经没了  b存在的话 里面会有一个 i