JS-闭包小解析

闭包

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的表达式(通常是函数)。这些被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

下面这段代码清晰地展示了闭包:

function foo () {
    var a = 2;
    function bar () {
        console.log(a);
    }
    return bar;
}
var baz = foo ();
baz (); //2----闭包效果~

bar ( ) 在自己定义的词法作用域以外的地方正常执行。

在foo ( )执行后,通常foo ( )的整个内部作用域都被销毁,因为引擎有垃圾回收器用来释放不再使用的内存空间,但是闭包会阻止被销毁,内部作用域依然存在。

由于bar ( )的声明位置,它拥有涵盖foo ( )内部作用域的闭包,使该作用域能一直存活,以供bar ( )在之后任何时间进行引用。

也正是因为内部作用域依然存在,所以可以用来封装一个私有变量。但是不必要的闭包会增加内存消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值