JavaScript 闭包

来源:互联网 发布:推荐算法 pdf 编辑:程序博客网 时间:2024/05/18 01:20

一、闭包

1.        如何从外部读取局部变量(闭包):

           在一个函数内部,再定义一个函数:

           第一步:定义一个普通函数f1();

           第二步:在f1中定义一个普通函数f2();

           第三步:在f1中返回f2(在f1中返回f2的引用)

           第四步:执行f1,把f1的返回结果复制给变量c;

           第五步:执行c();

           函数A的内部函数B被函数A以外的一个变量C引用

           Function f1(){

                Var n=99;

           Function f2(){

               Alert(n);

           }

           Return f2;

           }

           Var result =f1();

           Result();//99外部可以访问局部变量

2.        闭包:当一个内部函数被其他函数之外的变量引用的时候,就形成了闭包。

3.        闭包的特性:

           1)        函数嵌套函数

           2)        函数内部可以引用外部的参数和变量

           3)        参数和变量不会被垃圾回收机制回收

4.        闭包的用途:

           1)        可以直接读取函数内部定义的变量

           2)        让这些变量的值始终存在内存中

5.        注意:

           1)        问题1:闭包会使函数中的变量都被保存在内存中,内存消耗大,所以不能滥用,否则会导致网页的性能问题,内存泄漏

           解决方案:在退出函数的时候,将不使用的局部变量全部删除

           2)        问题2:闭包会在复函数外部,改变复函数内部的变量值,如果把复函数当做对象使用,把闭包当做公用方法(public),内部变量相当于私有属性(privatevalue)

            ---------不能随便改变复函数内部变量的值。