JavaScript闭包

JavaScript之闭包

“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)—-百度百科

javascript

对于javascript,闭包通俗来说也就是声明的变量,在函数执行完成的时候,由于被其他变量所引用,而导致声明的变量不能被垃圾回收系统回收掉,一直保存在内存中。

举个李子

<script>
//这个函数应该属于全局作用域 window
function addOne(){

    //在函数内声明一个变量
    var temp = 1;
    //没有用var 修饰,说明属于window全局作用域
    bb = function(){

        temp +=1;
        alert(temp);
    }

    return function()
    {
        temp+=1;
        alert(temp);
    }

}
//执行声明的函数,将返回值赋给了obj,同时为window添加bb函数 ,不然下面执行bb()会提示bb未定义

var obj = addOne();
obj();
obj();
bb();
bb();
</script>

结果

2
3
4
5

这个结果说明了,temp这个变量在执行完addOne这个函数之后,并没有被垃圾回收机制所回收。而是一直保持在内存中,当你每一次调用obj()和bb()时都会在其原有的值上加1。

为何temp没有被垃圾回收

为什么没有被垃圾回收,是因为addOne()内返回了一个函数,这个函数拥有temp的引用,而这个函数又赋给了,属于window全局域的obj变量。所有在你的窗口没关闭之前,temp就一直不会被回收。至于bb,更不用说了,直接声明的全局函数,用于了temp的引用。
引用链window——>obj——>addOne返回的匿名函数—–>temp

注意

请考虑好再使用闭包,因为不会被垃圾回收,而会一直占用内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值