js 闭包详解

1. 闭包的理解

首先, 我们可以理解闭包为:

闭包就是能够读取其他函数内部变量的函数

外层函数的作用域对象, 被内层函数对象引用着, 无法释放. 这个外层函数的作用域就是闭包对象

让这些变量的值始终保持在内存中,不会被垃圾回收机制回收

闭包的目的:

保护函数内部的变量, 防止被外部的变量污染到, 其内部函数只能通过外部函数访问到

2. 闭包例子

闭包怎么写呢, 方法如下:

  • 外层函数包裹要保护的变量和内层函数, 内层函数一定要使用了外层函数的局部变量
  • 外层函数将内层函数抛出到外部
  • 调用者调用外层函数, 获得返回的内层函数对象, 保存在变量中, 反复使用.
function out() {
	var total = 100;
	return function(money){
		total = total - money;
		console.log(`小明花了${money}元, 还剩下${total}`)
	}
}

var pay = out()
pay(10);
pay(10);
total = 0;
pay(10)

// 小明花了10元, 还剩下90元
// 小明花了10元, 还剩下80元
// 小明花了10元, 还剩下70元

// 函数外边的变量并没有污染

3. 闭包的缺点

  • 比普通函数占用更多的内存, 多占用外层函数的作用域对象
  • 闭包不会自动释放, 可能造成内存泄漏

4. 闭包缺点解决方案

使用完闭包后, 如果不再使用了, 我们可以手动释放闭包

还是接着上面的代码

pay = null

5. 总结

5.1 作用
  1. 可以读取函数内部的变量
  2. 可以隐藏变量, 避免全局污染
5.2 缺点
  1. 可能造成内存泄漏
  2. 导致变量不会被垃圾回收机制回收, 造成内存消耗
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值