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 作用
- 可以读取函数内部的变量
- 可以隐藏变量, 避免全局污染
5.2 缺点
- 可能造成内存泄漏
- 导致变量不会被垃圾回收机制回收, 造成内存消耗
本文深入探讨JavaScript中的闭包,解释其作为保护内部变量和防止全局污染的机制。通过实例展示了闭包的创建和使用,同时指出闭包可能导致的内存消耗问题。针对内存泄漏,建议在不使用闭包时手动设置为null来释放。闭包的主要作用在于读取内部变量和隐藏变量,但也需要注意其潜在的内存管理挑战。
1600

被折叠的 条评论
为什么被折叠?



