闭包可以使得变量值始终保持在内存中
代码:
var numAdd;
function f1(){
var num = 100; //局部变量,生存期在f1()调用完以后被删除,但使用闭包后就不会被删除了
//匿名函数
numAdd = function(){
num+=1
}
function f2(){
alert(num)
}
return f2;
}
var result = f1();
result(); // 输出100
numAdd();
//闭包使得变量始终保持在内存中
result(); //输出101 //num并没有被删除
numAdd();
result(); //输出102
闭包缺点:
1、闭包会使得函数中的变量始终保持在内存中,内存消耗很大,所以不能滥用闭包,否则会
造成网页性能问题;在IE中会导致内存泄露
2、闭包会在父函数外部,改变父函数内部的变量值
闭包优点:
1、保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
2、在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
3、匿名自执行函数可以减少内存消耗