站長資訊網
最全最豐富的資訊網站

javascript內存泄漏的原因有哪些

javascript內存泄漏的原因:1、全局變量使用不當;2、閉包使用不當;3、延時器或定時器沒有被清除;4、沒有清理的DOM元素引用(dom清空或刪除時,事件未清除)。

javascript內存泄漏的原因有哪些

本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

內存泄露是指一塊被分配的內存既不能使用,又不能回收,直到瀏覽器進程結束。即指由于疏忽或錯誤造成程序未能釋放已經不再使用的內存。 內存泄漏并非指內存在物理上的消失,而是應用程序分配某段內存后,由于設計錯誤,導致在釋放該段內存之前就失去了對該段內存的控制,從而造成了內存的浪費。這里就講一些常見會帶來內存泄露的原因。

1. 全局變量

JavaScript可以處理沒有聲明的變量:一個未聲明的變量的引用在全局對象中創建了一個新變量。在瀏覽器的環境中,全局對象是window。

function foo(){   name = '前端曰'; } // 其實是把name變量掛載在window對象上 function foo(){   window.name = '前端曰'; }  // 又或者 function foo(){   this.name = '前端曰'; } foo() // 其實這里的this就是指向的window對象

這樣無意中一個意外的全局變量就被創建了,為了阻止這種錯誤發生,在你的Javascript文件最前面添加 ‘use strict;’ 。這開啟了解析JavaScript的阻止意外全局的更嚴格的模式?;蛘咦约鹤⒁夂米兞康亩x!

2. 閉包

閉包:匿名函數可以訪問父級作用域的變量。

var names = (function(){       var name = 'js-say';     return function(){         console.log(name);     } })()

閉包會造成對象引用的生命周期脫離當前函數的上下文,如果閉包使用不當,可以導致環形引用(circular reference),類似于死鎖,只能避免,無法發生之后解決,即使有垃圾回收也還是會內存泄露。

3. 被遺忘的延時器/定時器

在我們的日常需求中,可能會經常試用到 setInterval/setTimeout ,但是使用完之后通常忘記清理。

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

setInterval/setTimeout 中的 this 指向的是window對象,所以內部定義的變量也掛載到了全局;if 內引用了 someResource 變量,如果沒有清除 setInterval/setTimeout 的話someResource 也得不到釋放;同理其實 setTimeout 也一樣。所以我們用完需要記得去 clearInterval/clearTimeout。

4、沒有清理的DOM元素引用(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() {     document.body.removeChild(document.getElementById('button'));     // 此時,仍舊存在一個全局的 #button 的引用     // elements 字典。button 元素仍舊在內存中,不能被 GC 回收。 }

【推薦學習:javascript高級教程】

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产福利精品在线观看| 国产精品哟哟视频| 日韩精品人妻av一区二区三区| 国产高清在线精品一本大道| 91精品国产自产在线观看高清| 青青草原精品国产亚洲av| 亚洲精品国产第1页| 4444亚洲国产成人精品| 亚洲精品无播放器在线播放| 日韩免费在线观看| 久久精品中文騷妇女内射| 一本一本久久A久久综合精品 | 日韩精品系列产品| 久久久久亚洲精品中文字幕| 合区精品中文字幕| 精品96在线观看影院| 国产日韩精品SUV| 国产亚洲精品第一综合| 精品无人区麻豆乱码无限制 | 国产免费无遮挡精品视频| 久久久精品视频免费观看| 精品国内在视频线2019| 国产精品女人在线观看| 成品人和精品人的区别在哪里| 国产乱人伦精品一区二区| 亚洲一区二区三区国产精品| 国产精品亚洲午夜一区二区三区| 欧美日韩精品一区二区在线观看| 99re热久久这里只有精品6| 日韩精品中文字幕无码专区 | 九九热在线精品视频| 大伊香蕉在线精品不卡视频| 国产一区麻豆剧传媒果冻精品 | 91精品久久久久久无码| 国产剧情精品在线观看| 久久国产亚洲精品无码| 国产亚洲精品看片在线观看| 国语自产精品视频在线完整版| 久久精品国产精品亚洲艾草网| 亚洲午夜精品一区二区麻豆| 黄床大片免费30分钟国产精品|