闭包

1.什么是闭包?

闭包就是能够读取其他函数内部变量的函数(也可以说是子函数访问父函数的局部变量),比如函数a里面一个函数b,b引用了a的变量,这就形成了一个闭包,比如:

            function outer() {
                var a=0;
                return function inner() {
                   a++;
                   console.log(a)
                }
            }
            var t1=outer();//打印1

下面这个会打印什么?

            function outer() {
                var a=0;
                return function inner() {
                   a++;
                   console.log(a)
                }
            }
            var t1=outer();
            t1()//打印1
            t1()//打印2
            t1()//打印3

为什么?首先t1()是一个函数,开辟了一个内存单元,一共调用了三次outer函数,而a是outer函数的一个变量,这个变量在inner函数中被改变了,所以函数inner每执行一次a就在原来的基础上+1,因此outer函数中的a变量会一直保存在这个内存单元中。当然将var a=0放在outer函数外面,结果也是1,2,3;若将var a=0放在inner函数内部,那将会打印出1,1,1

            function outer() {
                var a=0;
                return function inner() {
                   a++;
                   console.log(a)
                }
            }
            var t1=outer();
            var t2=outer();
            var t3=outer();
            t1()//打印1
            t2()//打印1
            t3()//打印1

为什么?因为t1、t2和t3是三个函数,这三个函数开辟了三个不同的内存单元,所以它们之间是相互独立的。但是若把a=0放在outer函数外面,就会打印出1,2,3,为什么呢?a在outer函数外面,虽然定义了三个函数,但可以理解为都是“内部”的,所以a也是在累加。

2.闭包的优缺点。

优点:减少全局变量的使用;减少传递函数的参数量;封装性;缺点:闭包会占用内存资源,过多使用会导致内存溢出。解决办法:把不需要但又不能被销毁的变量赋值为null,强行销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值