闭包为何可实现变量持久性

来源:互联网 发布:哥贝克力 知乎 编辑:程序博客网 时间:2024/06/08 14:40

请看如下例子:

function f1(){

    var a=1;                           //私有变量,外部不能访问。但能通过闭包访问。

             add=function(){               
                      a+=1;
              }

    function f2(){              

      alert(a);

    }

    return f2;

  }

  var result=f1();

  result(); // 1

  add(); //调用

  result(); // 2

result就是闭包f2函数。它一共运行了2次,第一次的值是1,第二次的值是2。

这说明函数f1中的局部变量a一直保存在内存中,并没有在f1调用结束后被自动清除。

因为f2在f1中定义,而f2被赋给了一个全局变量result,所以f2始终在内存中(全局的变量和全局函数只有在主程序结束后才会被操作系统回收),而a在f2中,所以不会在f1调用结束后立即被垃圾回收机制回收。

另外,将add的定义变成function add(){a+=1}就会报错,这是为什么呢?

因为function add(){a+=1}声明在f1里,那么它是局部函数,所以f1外不能直接访问。。。。。


原创粉丝点击