1、垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的 引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的 内存即可回收
2、setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏
3、闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
Js内存泄露解决方法
1.global variables:对未声明的变量的引用在全局对象内创建一个新变量。在浏览器中,全 局对象就是 window。
function foo(arg) {
bar = 'some text'; // 等同于 window.bar = 'some text';
}
解决: 创建意外的全局变量
function foo() {
this.var1 = 'potential accident'
}
2.可以在 JavaScript 文件开头添加 “use strict”,使用严格模式。这样在严格模式 下解析 JavaScript 可以防止意外的全局变量
3.在使用完之后,对其赋值为 null 或者重新分配
4.被忘记的 Timers 或者 callbacks
在 JavaScript 中使用 setInterval 非常常见 大多数库都会提供观察者或者其它工具来处理回调函数,在他们自己的实例变为不可达时,
会让回调函数也变为不可达的。对于 setInterval,下面这样的代码是非常常见的:
var serverData = loadData();
setInterval(function() {
var renderer =