前端面试常客-闭包

闭包概念
广义:函数内部使用了外部的变量
狭义:内部函数使用了外部函数的局部变量
没有闭包这个概念之前我们不知道闭包是什么东西,看着觉得很难,理解了概念后,会发现闭包是再常见不过的一个问题,并且我们就经常使用,所以看下去之前建议再读一遍闭包的概念,理解闭包的概念。

function outer(){
	let index = 0
	return function(){
		index++
	}
}
// res保存的是一个function
let res = outer()
// 这个的res()又执行了这个res的方法
console.log(res())

在这一段代码中,index是函数的变量(也是局部变量),outer()执行返回一个function(){index++},并且赋值给res,这时的res保存的是一个函数,res函数里面的index用到了外面的变量index,所以这是一个闭包。

总结:局部变量是安全的,外部不可修改,所以使用闭包的作用也是保证数据的安全
如果面试官问我们

闭包是什么?
答:闭包是内部函数使用了外部函数的局部变量,他的作用主要是保证数据的安全,把全局变量变成局部变量(自执行函数也可以把全局变量变成局部变量,但是自执行函数不可操作,局限性大)。

闭包有没有什么缺点?
答:闭包通常是外部变量保存内部函数,导致内部函数不会被释放,内部函数又占用了外部函数的变量,导致外部函数的变量也无法释放,因此会占用内存。

这种缺点有没有办法解决?
答:可以解决,如果闭包函数不需要再次使用,可以给保存内部函数的变量重新赋值,释放掉内部函数的占用,从而释放所有资源。

用上面的代码做例子解释缺点和解决方法
外部变量res保存内部函数function(){index++},导致内部函数不会被释放,内部函数又占用了外部函数function outer(){}的index变量,导致这个外部函数也无法释放,因此占用内存。
解决方法就是给保存内部函数的外部变量重新赋值,释放掉内部函数的占用
res = null
这样就可以释放所有资源了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值