<!DOCTYPE html>
<html>
<head>
<title>闭包2</title>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
//闭包最大用处有两个,一个是前面提到的可以读取函数内部的变量。但是使用的时候不可以直接写出来,只能迂回获取
//另一个就是让这些变量的值始终保持在内存中。
//result实际上就是闭包f3函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f2中的局部变量n一直保存在内存中,并没有在f2调用后被自动清除。
function f2(){
var n=999;
nAdd=function(){n+=1}
function f3(){
alert(n);
}
return f3;
}
var result=f2();
result(); // 999
nAdd();//因为上面定义的时候其实全局变量,所以此时不会报错。
result(); // 1000
function f1(){
var n=999;
var nAdd=function(){ alert(n+=1);}
function f2(){
nAdd();
}
return f2;
}
var result=f1();
result(); // 1000
result();//1001
//1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
</script>
</body>
</html>