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

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

作者: 半颗糖嘿 | 来源:发表于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