定义: 当一个函数的返回值是另一个函数,而返回的那个函数调用了其父函数的内部变量,且返回的那个函数在外部被执行,就产生了闭包
var counter = 10;
function add(){
var counter = 0;
return function(){
counter+=1;
alert(counter);
}
}
var s = add();
s();//1
s();//2
s();//3
三个要素: 函数套函数;
内部函数访问外部函数的局部变量
内部函数在外部被执行
特点:
-
函数套函数
-
内部函数可以直接访问外部函数的内部变量或参数
-
变量或参数不会被垃圾回收机制回收
优点:
-
变量长期驻扎在内存中
-
避免全局变量的污染
-
私有成员的存在
缺点
常驻内存 增大内存的使用量 使用不当会造成内存的泄露