JS閉包迴圈引用導致記憶體洩漏之解決方法

2021-07-05 09:11:03 字數 570 閱讀 4267

方法

一、主動設定js物件element為空,打破迴圈引用

function assignhandler()

/*閉包可以監聽外部變數的變化,所以這裡把element=null,也就是說外部這個變數相當於不存在了,雖然賦值是在閉包後面,閉包也能夠檢測到!所以匿名函式不會有外部的dom物件的引用,不會記憶體洩漏*/

var ***="female";

element=null;

方法二、通過新增另外乙個閉包來避免js物件和dom物件之間的迴圈引用

window.οnlοad=function outerfunction()

//通過另外乙個閉包來避免js物件和dom物件之間的迴圈引用

function anotherinnerfunction()

;anotherinnerfunction();}方法

三、通過新增另乙個函式來避免閉包本身,進而阻止記憶體洩漏

window.οnlοad=function()

//該函式無法訪問上面匿名函式中間的obj物件,從而可以阻止記憶體洩漏!

function doesnotleak()

為什麼迴圈引用會導致「記憶體洩漏」

首先這個問題對於現代瀏覽器 ie9 來說已經不是問題了,這個問題其實是出現在ie8的時代了 我們主要是通過這個問題來介紹下瀏覽器的垃圾 機制 js是有自己的一套自動垃圾 機制的,這是大部分高階語言都具備的 除了c語言 然而它的機制是什麼呢?採用過的有2種 標記清除 和 引用計數 先明確一點現代瀏覽器...

閉包之記憶體洩漏

對於全域性變數來說如果沒有主動銷毀則將永遠存在.即如果沒有主動的將其置為null,其始終會佔據一部分記憶體.而對於函式內使用var宣告的區域性變數來說,當函式執行完畢後區域性變數會自行銷毀.function f f 而閉包的結構則可以改變變數的生存週期,使區域性變數不被銷毀 var cost fun...

閉包的迴圈引用

unowned self 面試題 請說出工作中遇到的迴圈引用 不要說沒有遇到過 class viewcontroller uiviewcontroller func loaddata completion 析構函式 類似於 oc 的 dealloc deinit 方法一 1.方法一,類似於 oc 的...