Si vous créez un élément dans une fonction comme:
function makeDomElement()
{
var createdElement = document.createElement('textarea');
}
Et vous ne l'ajoutez nulle part dans le DOM, c'est-à-dire via les fonctions .appendChild, reste-t-il toujours en mémoire? Alors tu devrais faire
function makeDomElement()
{
var createdElement = document.createElement('textarea');
delete createdElement;
}
Je suis juste curieux :)
Il variera d'un navigateur à l'autre mais le mot-clé javascript delete
n'a rien à voir avec la méthode createElement
du DOM. Il n'est pas nécessaire d'utiliser delete
.
Ce qui se passera, c'est que la référence à l'élément actuellement contenu dans le createdElement
récupérera les ordures. Maintenant, dans le cas de IE cela signifiera que l'élément aura son nombre de références tombé à 0 donc il se détruira et libérera sa mémoire. D'autres navigateurs font les choses différemment typiquement les éléments dans le DOM sont eux-mêmes des objets récupérés et seront supprimés pendant le même cycle GC (ou peut-être un DOM spécifique).
Si l'élément avait été ajouté au document, dans le cas de IE il y aurait une autre référence ajoutée à l'élément, donc lorsque la référence dans createdElement
est supprimée, l'objet élément serait toujours ont un nombre de références différent de zéro et continuent d'exister.
Dans le cas d'autres navigateurs où les éléments eux-mêmes sont récupérés, l'élément ne sera pas collecté car le collecteur le verra dans le graphique des objets connectés au document.
Une fois la fonction terminée, il n'y a plus de référence à l'objet, c'est-à-dire que si le garbage collector fonctionne correctement, il doit être collecté (il y a un bug IE qui empêche les objets avec des références circulaires d'être collectés si Les nœuds DOM sont impliqués).
De plus, votre code est cassé car les variables locales ne peuvent pas être supprimées: essayer de le faire entraînera même une erreur de syntaxe en mode strict ES5.