美文网首页
[前端]什么是内存泄漏?

[前端]什么是内存泄漏?

作者: 半颗糖嘿 | 来源:发表于2022-10-09 19:59 被阅读0次

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
常见的内存泄漏:意外的全局变量、未清除的定时器、闭包、dom 的引用。
1.意外的全局变量

function foo(arg) { 
    bar = "this is a hidden global variable"; 
} 

2.被遗忘的计时器或回调函数

var someResource = getData(); 
setInterval(function() { 
    var node = document.getElementById('Node'); 
    if(node) { 
        // 处理 node 和 someResource 
        node.innerHTML = JSON.stringify(someResource)); 
    } 
}, 1000);

3.脱离 DOM 的引用

var elements = { 
    button: document.getElementById('button'), 
    image: document.getElementById('image'), 
    text: document.getElementById('text') 
}; 
 
function doStuff() { 
    image.src = 'http://some.url/image'; 
    button.click(); 
    console.log(text.innerHTML); 
    // 更多逻辑 
} 
 
function removeButton() { 
    // 按钮是 body 的后代元素 
    document.body.removeChild(document.getElementById('button')); 
 
    // 此时,仍旧存在一个全局的 #button 的引用 
    // elements 字典。button 元素仍旧在内存中,不能被 GC 回收。 
}

4.闭包

var theThing = null; 
var replaceThing = function () { 
  var originalThing = theThing; 
  var unused = function () { 
    if (originalThing) 
      console.log("hi"); 
  }; 
 
  theThing = { 
    longStr: new Array(1000000).join('*'), 
    someMethod: function () { 
      console.log(someMessage); 
    } 
  }; 
}; 
 
setInterval(replaceThing, 1000);

参考链接:https://blog.csdn.net/qappleh/article/details/80337630

相关文章

网友评论

      本文标题:[前端]什么是内存泄漏?

      本文链接:https://www.haomeiwen.com/subject/ajnbartx.html