常见的内存泄漏
-
意外声明全局变量导致的内存泄漏
意外声明全局变量是最常见的也是最容易修复的内存泄露问题,下面看一个例子
function setName(){ name='小明' };
这时候的解析器会把name当作window的属性来创建(相当于window.name=‘小明’),可想而知,只要window不被清理那么name就不会消失,这个问题也好解决,就是再变量声明前添加var、let、const关键字即可,这样变量就会在函数执行完离开作用域。
-
定时器导致的内存泄漏
定时器是通过使用闭包引用了外部变量导致的内存泄露,
let name = '小明'; setInterval(()=>{ console.log(name); },100);
只要定时器一直运行,回调函数中的name就会一直存在,占用内存空间。垃圾回收程序也知道这一点,但就是不会清理外部变量。
-
闭包导致的内存泄漏
直接看例子
let setName = function(){ let name = '小明'; return function(){ return name; }; };
当调用setName在这个函数时会导致分配给name的内存泄露,只要被返回的函数一直存在,那么name就一直会存在,不会被清理,因为闭包就一直在引用着name,假如name的内容很大,那么就会导致性能损耗。
有什么理解不到位的,还望各位大佬不吝赐教。