1.什么是内存泄漏
一块内存不被使用了,却没有返还给操作系统或者空闲内存池的现象。
2.JavaScript常见内存泄漏
(a)意外的全局变量
function fn(){ result = 'global'; }
上述代码,fn函数内部意外定义了一个全局变量result.
全局变量是不会被回收的变量,除非设置成null或者被重新赋值。所以为了避免内存泄漏,在使用不必要的全局变量之后尽量把起设置为null或者重新赋值。
2.被遗漏的定时器和回调函数
举个例子:
function fn(){ var el = $('#test'); el.onClick = function(){ console.log('click'); } } fn();
上述代码,闭包和变量相互引用,造成循环引用,两者都不会被内存回收。一般这种情况只在IE低版本浏览器中发生,因为IE对DOM和js对象采用不同的垃圾回收机制。
3.DOM之外的引用
4.闭包
参考文章:
JS内存泄漏 和Chrome 内存分析工具简介(摘)
JavaScript 闭包都会内存泄露吗?