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

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的阻止意外全局的更嚴格的模式。或者自己注意好變量的定義!

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號
久久国产综合精品SWAG蓝导航| 51精品国产人成在线观看| 日韩毛片高清在线看| 国产午夜亚洲精品不卡电影| 亚洲精品无码aⅴ中文字幕蜜桃| 精品成人乱色一区二区| 99热在线精品观看| 无码精品黑人一区二区三区| 久久99国产精品久久久| 99精品免费视频| 久久精品国产色蜜蜜麻豆| 九九在线精品视频| 日韩成人免费aa在线看| 国产精品视频一区| 国产精品无码MV在线观看| 亚洲综合精品成人| 国产精品天天看大片特色视频| 精品国偷自产在线| 亚洲精品成人久久| 亚洲精品第五页中文字幕| 精品无码日韩一区二区三区不卡 | 日韩精品一区二区三区影院| 国产麻豆精品在线观看| 国产精品人人妻人人爽| 精品久久久久久无码中文野结衣| 国产精品亚洲午夜一区二区三区| 蜜桃麻豆WWW久久囤产精品| 91福利精品老师国产自产在线| 亚洲天堂久久精品| 99国产精品99久久久久久| 99re66热这里都是精品| 5555国产在线观看精品| 亚洲自偷精品视频自拍| 精品久久人妻av中文字幕| 992tv精品视频tv在线观看| 网友自拍区视频精品| 欧美黑人欧美精品刺激| 蜜臀91精品国产免费观看| 国产精品一线二线三线| 日韩精品国产自在久久现线拍| 日韩精品中文字幕在线|