阿尔卑斯丶
圣骑士
圣骑士
  • 最后登录2023-11-03
  • 发帖数59
  • 社区居民
  • 原创写手
阅读:6711回复:0

[js]js中那些会造成内存泄漏的操作!

楼主#
更多 发布于:2018-09-17 19:09
一、什么是内存泄露?
内存泄漏是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。


二、会造成内存泄露的操作有哪些?
1、意外的全局变量:
function foo(){
a = "我不会被回收!"   //此时a会是一个全局变量,不会被回收;
}


2、不当的闭包引起的内存泄漏。闭包可以维持函数内的局部变量,使其得不到释放。


3、被遗忘的定时器或者回调;
[align=start]


  1. var someResouce=getData();



  2. setInterval(function(){



  3. var node=document.getElementById('Node');



  4. if(node){



  5. node.innerHTML=JSON.stringify(someResouce)



  6. }



  7. },1000)
如果 id 为 Node 的元素从 DOM 中移除, 该定时器仍会存在, 同时, 因为回调函数中包含对 someResource 的引用, 定时器外面的 someResource 也不会被释放。

4、没有清理的DOM元素引用


  1. var elements={


  2. button: document.getElementById("button"),


  3. image: document.getElementById("image"),


  4. text: document.getElementById("text")


  5. };


  6. function doStuff(){


  7. image.src="http://some.url/image";


  8. button.click():


  9. console.log(text.innerHTML)


  10. }


  11. function removeButton(){


  12. document.body.removeChild(document.getElementById('button'))


  13. }
游客


返回顶部

公众号

公众号