07-JavaScript的闭包

一、闭包

闭包的概念:在两个(或者多个)函数发生嵌套时,将内部的函数保存到外部时就会形成闭包。

 

function a(){
    var aaa = 123;
    funcrion b(){
        console.log(aaa)
    }
return b;
}
var glob = 100;
var test = a();
test(); //123
  1.  在函数a定义时,它的作用域链的顶层是只有Global Object
  2. 当a执行时,它会创建自己的AO对象,并将自己函数内部的变量和函数挂载到自己的AO对象中

     

  3.  当函数b定义时,因为他是在a函数内定义的,所以他的作用域链中生来就有a函数的AO对象和GO对象

     

  4.  当return b执行完毕的时候,a函数被销毁,但是我们需要知道的是销毁的只是他们之间的箭头,也就是地址

  5.  

    当执行b函数时,a函数的AO对象依旧存在于b函数的作用域链中,所以AO对象中的属性以及值b函数依旧可以通过作用域链查找到,这时就形成了闭包。

 

二、闭包的应用

  • 实现共有变量(例如累加器)
    function test(){
        var count = 0;
        return function(){
            count ++;
            console.log(count);
        }
    }
    var demo = test();
    demo();//1
    demo();//2
    ...

     

  • 可以做缓存 

    function test(){
        var str = '';
        function push(n){
            str += n;
            console.log(str);
        }
        return push;
    }
    var demo = test();
    demo('ttttt');// ttttt
    

     

  •  

    可以实现封装,属性私有化

     

     

    var inherit = (function(){
        var F = function(){};
        return function(target,origin){
            F.prototype = origin.prototype;
            target.prototype = new F();
            target.prototype.constructor = target;
            target.prototype.uber = origin.prototype;
        }
    }());

     

     

  •  

    模块化开发,防止变量污染

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值