Heim  >  Artikel  >  Web-Frontend  >  Fassen Sie das Speicherverlustproblem von JavaScript in Versionen vor IE9 zusammen

Fassen Sie das Speicherverlustproblem von JavaScript in Versionen vor IE9 zusammen

青灯夜游
青灯夜游nach vorne
2018-10-09 14:38:171985Durchsuche

Dieser Artikel fasst das Speicherverlustproblem von JavaScript in Versionen vor IE9 zusammen. Freunde, die sich dafür interessieren, können mehr darüber erfahren.

Versionen vor IE9 verwenden unterschiedliche Garbage-Collection-Routinen für JScript-Objekte und COM-Objekte (COM-Objekte verwenden eine „Referenzzählung“-Sammelstrategie), sodass Schließungen in diesen IE-Versionen einige besondere Probleme verursachen. Insbesondere wenn ein HTML-Element im Bereich des Abschlusses gespeichert wird, bedeutet dies, dass das Element nicht zerstört werden kann.
Sehen Sie sich das folgende Beispiel an:

function assignHandler() {
  var elem = document.getElementById('elem_id');
  elem.onclick = function(evt) {
    alert(elem.id);
  };
}

Der obige Code erstellt einen Abschluss, der als Ereignishandler für das Element elem fungiert, und dieser Abschluss erstellt einen Zirkelverweis. Da die anonyme Funktion einen Verweis auf das aktive Objekt von „assignHandler()“ speichert, ist es unmöglich, die Anzahl der Elem-Referenzen zu reduzieren. Solange die anonyme Funktion vorhanden ist, beträgt die Referenznummer von elem mindestens 1, sodass der von ihr belegte Speicher niemals wiederverwendet wird.

Der obige Code kann mit einer leichten Modifikation gelöst werden:

function assignHandler() {
  var elem = document.getElementById('elem_id');
  var elem_id = elem.id;
  elem.onclick = function(evt) {
    alert(elem_id);
  };
  elem = null;
}

Indem Sie eine Kopie von elem.id in einer Variablen speichern und im Abschluss darauf verweisen. Variablen eliminieren Zirkelverweise. Aber allein durch diesen Schritt kann das Speicherverlustproblem immer noch nicht gelöst werden.

"Der Abschluss bezieht sich auf das gesamte aktive Objekt, das die Funktion enthält, die elem enthält. Auch wenn der Abschluss nicht direkt auf elem verweist, wird dennoch eine Referenz im aktiven Objekt gespeichert, das die Funktion enthält. Daher gilt: Es ist notwendig, elem auf null zu setzen. Dadurch wird das DOM-Objekt dereferenziert, seine Anzahl an Referenzen erfolgreich reduziert und eine normale Wiederverwendung des von ihm belegten Speichers sichergestellt Ich hoffe, dass es für das Studium aller hilfreich sein wird. Weitere verwandte Tutorials finden Sie unter

JavaScript-Video-Tutorial

! Verwandte Empfehlungen:

PHP-Video-Tutorial zum öffentlichen Wohlfahrtstraining

JavaScript-Grafik-Tutorial


JavaScript Online-Handbuch

Das obige ist der detaillierte Inhalt vonFassen Sie das Speicherverlustproblem von JavaScript in Versionen vor IE9 zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen