闭包
闭包
- 闭包是指有权访问另一个函数作用域中的变量的函数
- 当内部函数被保存到外部时,将会生成闭包。
- 闭包会导致原有作用域链不释放,造成内存泄露。
- 内存泄漏就是内存占用,内存被占用的越多,内存就变得越来越少了,就像内存被泄露了一样
- 闭包会导致多个执行函数共用一个公有变量,污染全局变量。
- 但凡是内部的函数被保存到外部,一定生成闭包
function a() {
var num = 100;
function b () {
num ++;
console.log(num);
}
return b;
}
var demo = a();
demo();
demo();
-
a 被执行时
- 0 : aAO: num = 100;
- 1 : GO: demo = a();
-
b 被执行
- 0 : bAO;
- 1 : aAO : num = 100;
- 2 : GO: demo = a();
在第一次执行 function b 时,num ++就把 aAO 变成{num : 101},当 function b 执行完毕时,剪断的是 bAO,而 aAO 不变,当执行 function a 的 return b 时就把 aAO,GO 都29
存在了外部,执行完 a 销毁 scope 时去掉 a 的连接线,但是因为 return b 把 aAO,GO
存在了外部,所以依然还是可以访问值
在第二次执行 function b 时,aAO{num : 101},在 num ++就是 102
闭包的作用
- 实现公有变量
- 可以做缓存(存储结构)
-
可以实现封装,属性私有化。
-
模块化开发,防止污染全局变量
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/12561857.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?