闭包

本文详细介绍了JavaScript中的闭包概念,包括其工作原理、如何利用闭包实现变量长期驻留内存及避免全局变量污染的方法,并探讨了闭包在实际开发中的应用案例。此外,还讨论了闭包可能导致的内存泄露问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 什么是闭包

函数嵌套函数,内部函数可以引用外部函数的参数或者变量,外部函数不能引用内部函数的参数或者变量

 function aaa(a) {
    var a = 5;
    function bbb() {
        alert(a);
    }
    return bbb;
}
var c = aaa ();
c();
  • 垃圾回收机制

    函数中的变量在函数调用完后,会被垃圾回收机制收回。在闭包中,变量会被内层函数引用,所以不会收回。所以长期驻扎在内存中。

  • 闭包的好处

  1. 希望一个变量长期驻扎在内存中
  2. 避免全局变量的污染
var aaa = (function() {
     var a = 1;
     return function() {
         a++;
         alert(a)
     }
})();
aaa();//2
aaa();//3
  • 闭包的应用

1.内部函数私有化(模块化)

var aaa = (function() {
 var a = 1;
 function bbb() {
     a++;
     alert(a);
 }
 function ccc() {
     a++;
     alert(a)
 }
 return {
     b:bbb,
     c:ccc
 }
})()
aaa.b();
aaa.c();
  • 内存泄露
    IE下会引发内存泄露,当发生内存泄露的时候,页面跳转时,变量不会被释放。只有关闭浏览器后才能释放。

变量由获取dom节点或者数组对象创建,js对象属性引用内部,内部又引用外部的对象时,互相引用就会引发内存泄露。

<div id='box'>aaa</div>
<script>
    window.onload = function(){
        var oBox = document.getElementById('box');
        oBox.onclick = function() {
            alert(oBox.id);
        }
    }
    /*方法一*/
    window.onunload = function()oBox.onclick = null;
    }
    /*方法二*/
    oBox = null
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值