更新时间:2021-10-14 来源:黑马程序员 浏览量:
内存泄漏指任何对象在不再拥有或需要它之后却仍然存在。JavaScript中的内存泄漏大部分是由不合理的引用导致的。
下面我们介绍几种常见的造成内存泄露的情况
1、意外声明全局变量是最常见也最容易修复的内存泄漏问题,比如:
function fn() { name = '张三'; }
解释器在解释上面的函数时,会把name当做全局变量,即window.name =
'张三'。只要window对象没有被清理,那么name属性和属性值将一直存在,造成内存泄露。
解决方法:
(1)只要在变量声明前面加上var、let或const关键字即可,这样变量就会在函数执行完毕后离开作用域。
(2)使用this关键字
function fn() { this.name = '张三'; }
(3)可以在 JavaScript 文件开头添加 “use strict”,使用严格模式。这样在严格模式下解析 JavaScript 可以防止意外的全局变量
(4)在使用完之后,对其赋值为null或者重新分配
2、 定时器导致的泄露
let name = '张三'; setInterval(() => { console.log(name); }, 100);
上面的代码中,只要定时器一直运行,回调函数中引用的name就会一直占用内存。
3、闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环),下面我们看一个JavaScript闭包导致的内训泄露例子
let fun = function() { let name = '张三'; return function() { return name; }; };
调用fun()会导致分配给name的内存被泄漏。以上代码执行后创建了一个内部闭包,只要返回的函数存在就不能清理name,因为闭包一直在引用着它。
猜你喜欢
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19