什么是闭包、闭包原理、怎么解决内存泄露的问题、闭包使用场景

什么是闭包?

闭包:如果一个函数可以访问其外部函数的变量,它就是闭包。

举个例子:

outFn(name){
	return function(){
		console.log(name)
	}
}
const fn = outFn("张三")//fn得到outFn的返回值,为一个匿名函数
fn()//调用匿名函数
//console.log("张三")

闭包原理

虽然outFn已经执行完毕,但是其活动对象OA也不会销毁,因为返回的匿名函数仍然引用着outFn函数中的变量,这就是闭包(匿名函数维护着一个作用域链,在它本身找不到name变量时,他会顺着它维护的作用域链往上找)

所以闭包使用过多,会占用较多的内存,这也是一个副作用,内存泄露。

怎么解决内存泄露的问题?

即在不使用闭包时,把被引用的变量设置为null,手动清楚变量,这样下次js垃圾回收机制回收时,就会把设为null的变量给回收了。像上面的代码:直接name=null即可

闭包使用场景

  1. 防抖处理:
 window.onresize = debounce(fn, wait)

    function debounce(fn,wait) {
        var timer = null
        return function () {
            if (timer) {     //timer第一次执行后会保存在内存里
                clearTimeout(timer)
                timer = null
            }
            timer = setTimeout(function () {
                fn()
            }, wait)ssss

        }

    }
    var fn = function () {

        console.log('fn')
    }
  1. 老提起的for循环(用let也可以解决)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值