js 闭包详解

本文深入探讨JavaScript中的闭包,解释其作为保护内部变量和防止全局污染的机制。通过实例展示了闭包的创建和使用,同时指出闭包可能导致的内存消耗问题。针对内存泄漏,建议在不使用闭包时手动设置为null来释放。闭包的主要作用在于读取内部变量和隐藏变量,但也需要注意其潜在的内存管理挑战。

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. 导致变量不会被垃圾回收机制回收, 造成内存消耗
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值