js回收机制:当一个函数全部执行完毕或者返回了值的时候,函数里面的变量会被清除回归到初始状态。

 

在某种情况:

js这样的回收机制就会引出一个问题,当一个函数被执行完毕后cg了,然而在函数外的一个变量需要用调用该函数里面的值时就不能有想要的效果了

 

例子:

分析

for循环第一次 i 等于0的时候,传递给result的值是0,但是第二次执行时候result被cg了,i没记住值0,i直接变1了,下一次也一样。

 1 var result=[];
 2 function foo(){
 3     var i= 0;
 4     for (;i<3;i=i+1){
 5         result[i]=function(){
 6             alert(i);
 7         }
 8     }
 9 };
10 foo();
11 
12 result[0](); // 3
13 result[1](); // 3
14 result[2](); // 3

使用闭包:

(function(){

alert(i);

})()

当js执行完i=0时,

result[0]=0这个值被保存在内存中不释放。。。。
 1 var result=[];
 2 function foo(){
 3     var i= 0;
 4     for (;i<3;i=i+1){
 5         result[i]=(function(){
 6              alert(i);
 7         })();
 8     }
 9 };
10 foo();
11 result[0](); // 0
12 result[1](); // 1
13 result[2](); // 2

这个例子比较经典。