1.什么是闭包(closure)?
闭包是一个特殊的函数,是一个可以访问外部(封闭)函数作用域链中变量的内部函数
2.如何生成一个闭包?
当一个内部函数引用了外部函数的数据(变量/函数)时,那么内部的函数就是闭包
所以只要满足"是函数嵌套",“内部函数引用外部函数数据”
3.闭包特点:
只要闭包还在使用外部函数的数据,那么外部的数据就一直不会被释放
也就是说可以延长外部函数数据的生命周期
4.闭包注意点:
当后续不需要使用闭包的时候,一定要手动将闭包设置为null,否则会出现内存泄漏
5.闭包的优缺点:
优点:不产生全局变量,实现属性私有化
缺点:就是闭包中的数据会常驻内存,在不用的时候需要删除,否则会导致内存溢出(泄露)
function hello(){
var num = 100;
var showResult = function () { alert(num)}
num++;
return showResult;
}
var showResult = hello();
showResult()//执行结果:弹出101
执行hello()后,hello()闭包内部的变量会存在,而闭包内部函数的内部变量不会存在,使得
JavaScript的垃圾回收机制不会收回hello()占用的资源,因为hello()中的内部函数的执行
需要依赖hello()中的变量