闭包问题

1.什么是闭包
JavaScript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量,而这些变量是不会随着上一级函数的执行完成而销毁。
案例:

function A(){
    var i=0;
    function b(){
        window.alert(i++);
    }
    return b;
}
//闭包->gc垃圾回收机制
A(); //此时内存中有i空间,调用完后垃圾回收机制会默认将i空间回收
var c=A(); //将返回的b交给c,而b函数中用到i,i空间不会被回收,则i闭包 
c();//输出0;
c();//输出1,从而证明i变量被闭包;

这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为0)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
闭包作用:就是在a执行完并返回后,闭包使得JavaScript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

2.闭包解释
(1)闭包和gc(垃圾回收机制)是相关联的;
(2)闭包实际上是涉及到一个对象的属性,何时被gc处理的问题。
(3)怎样才能对对象的属性形成一个闭包;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值