关于JS-闭包概念的好文章

读书笔记:

1、闭包使用动机:

1):将函数的内部变量暴露出来;

2):将函数内部变量驻留在内存中。


2、闭包使用方式:

1)使用函数体内部的全局变量和匿名函数

    function Obj(){
        var vars = [];
        //addVar是函数体内的全局变量,匿名方法是闭包(其引用了Obj()方法中的临时变量vars)
        addVar = function(newVar){
            vars.push(newVar);
        }
        //readVars是函数体内的全局变量,匿名方法是闭包(其引用了Obj()方法中的临时变量vars)
        readVars = function(){
            alert(vars);
        }
            }
    //Obj()调用后,会初始化函数体内的全局变量addVar和readVars
    Obj();
    addVar("1");
    addVar("esdsdg");
    readVars();//显示1,esdsdg
    addVar("fdsafadsf");
    readVars();//显示1,esdsdg,fdsafadsf
    /*
     总结:
     在全局变量addVar和readVars初始化后,因为addVar和readVars引用了闭包(匿名方法),而
     而匿名方法又引用了Obj()方法体内的临时变量。所以,在全局变量addVar和readVars不释放前,Obj()将
     不会释放并且临时变量vars将一直驻留在内存中。
     */

2)将内部函数作为返回值,将内部函数(闭包)暴露


    function newObj(){
        var vars = [];
        //闭包addVar,引用了vars
        function addVar(newVar){
            vars.push(newVar);
            alert(vars);
        }
        //通过返回值的方式将闭包函数暴露
        return addVar;
    }
    //objRef引用了闭包函数addVar()
    var objRef = newObj();
    objRef("t1");//t1
    objRef("t2");//t1,t2
    /*
     总结:
     1、函数通过返回值的方式将闭包函数暴露;
     2、bjRef引用了闭包函数addVar(),闭包函数使用newObj()函数中的临时变量vars
     3、在bjRef不释放的情况下,newObj()不会被释放
     */


3、引用关系为3个+的时候,对象才不会释放,或者会被回收机制回收。



好文推荐:

http://www.jb51.net/article/24101.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值