理想是火,点燃熄灭的灯。
前端垃圾回收(Garbage Collection, GC)主要由 JavaScript 引擎自动完成,用于释放不再被引用的内存。虽然前端开发者通常不需要手动释放内存,但了解一些常见导致内存泄漏和垃圾回收场景,对性能优化和避免 Bug 很有帮助。
1.如果引用类型的变量 - 数据作用域一直存在(全局)
let obj = { name: 'Alice' }; obj = null; // 原来的对象没有被引用,可以被回收
拓展在js中“引用”的概念
引用”不是字面上的“引用”这个词,而是编程里一个具体的概念:
引用 = 变量里存的是某个内存地址,指向某个对象的真实位置。
换句话说:
举例说:
let obj = { name: 'Alice' }; // obj 里面存的,是对象的地址(引用) let a = obj["name"]; // a 里面存的,是字符串 'Alice' 本身(值),不是引用
2.事件监听器 window.addEventListener
3.定时器setTimeout、setInterval
4.DOM 元素被移除,引用也被清除
简单理解 闭包就是 函数A套函数B,函数A的变量,函数B也可以访问
内存泄露导致的原因就是 正常执行完函数A,函数A中的变量会被自动回收,但是由于函数B还持续的对函数A的变量持续引用 而导致函数A中的变量无法被自动回收
举例说明:
function A() { let a = [1, 2, 3]; return () => { return a[0]; }; } let value = A();
调用 A()
,函数内部创建了数组 a
。
A()
返回了一个箭头函数,这个箭头函数形成了闭包,能访问 a
。
你把这个闭包函数赋给了外部变量 value
。
value
现在是一个函数,它闭包着 A
作用域里的变量 a
。
只要 value
存在,闭包中的 a
就不会被垃圾回收。
当你不再需要这个闭包,可以手动断开引用:
value = null; // 这样闭包里的 a 可以被回收
作者: Bill 本文地址: http://biaoblog.cn/info?id=1747794118016
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇:没有了
下一篇:深入js的sort稳定排序