闭包讲解

1.什么是闭包

闭包就是能够读取其他函数内部变量的函数。

2.如何产生一个闭包

function foo() {
    var a = 2;
    function bar() {
        console.log(a);
    }
    return bar;
}
var baz = foo();

baz(); //2  这就是闭包的效果
复制代码

3.闭包的应用

利用闭包的强大威力,可以用来创建模块模式(模块就是创建私有变量和私有方法)

function CoolModule() {
    var something = 'cool';
    var another = [1, 2 , 3];
    
    funcion doSomething() {
        console.log(something);
    }
    
    function doAnother() {
        console.log(another.join(" ! "));
    }
    
    return  {
        doSomething: doSomething,
        doAnother: doAnother
    }
}

var foo = CoolModule();

foo.doSomething();
foo.doAnother();
复制代码

上述例子中的CoolModule()是一个独立的模块创建器,可以被任意调用多次,每次调用都会创建一个新的模块实例。当只需要一个实例时,可以对这个模式进行简单的改进来实现单例模式:

var foo = (function CoolModule() {
    var something = 'cool';
    var another = [1, 2 , 3];
    
    funcion doSomething() {
        console.log(something);
    }
    
    function doAnother() {
        console.log(another.join(" ! "));
    }
    
    return  {
        doSomething: doSomething,
        doAnother: doAnother
    }
})()

foo.doSomething();
foo.doAnother();
复制代码

依据:(function CoolModule() {..})是函数表达式,而函数表达式只能在..所代表的位置中被防问,外部作用域则不行。

4.闭包的缺陷

闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值