JS闭包

闭包:当内部函数被返回到外部时,会生成闭包。闭包会导致原有作用域链不释放,造成内存泄漏(其实就是占内存)

函数定义时,可以不看里面写了什么,只有在执行时才看里面的代码

当a执行时,定义b,并把b的引用返回出去。此时,a执行完,它自己的AO销毁,按理来说b也就没有了,但是b被返回出去了,它的作用域链没有断,仍然指向a的AO和GO(这里b没有执行,所以没有生成它自己的AO,第0位仍然是a的AO)

 

之前对这个函数不理解,明白了作用域就很清楚了

function a(){
    var arr = [];
    for(var i = 0;i<3;i++){
        arr[i] = function(){
            console.log(i);
        }
    }
    return arr;
}
var f = a();
f[0]()    //3
f[1]()    //3
f[2]()    //3
/*
    当函数a执行完,i的值变成了3,a的作用域链被销毁,数组arr被返回出来,它的作用域链和上面的图是一样的,它里面的每一项都是一个函数的引用,
    当调用其中一个函数时,会打印i的值,此时函数里面引用的i的值已经变成了3,所以打印出来的都是3
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值