2010-05-17 10 views
0

Je souhaiterais connaître la fuite de mémoire dans le code mentionné ci-dessous. Est-ce que JavaScript fait la collecte automatique des ordures.Référencement de variables globales dans des étendues locales

var aGlobalObject = SomeGlobalObject; 
function myFunction() { 
    var localVar = aGlobalObject; 
} 

Dois-je effacer la mémoire comme indiqué ci-dessous.

var aGlobalObject = SomeGlobalObject; 
function myFunction() { 
    var localVar = aGlobalObject; 
    localVar = null;// or delete localVar 
} 

Merci

Répondre

2

Vous n'avez pas de fuite de mémoire dans ce code. La variable locale fait référence au même objet que la variable globale. Lorsque la fonction retourne, la variable locale est supprimée car plus rien n'y fait référence. L'objet reste lui-même, car il est toujours référencé par la variable globale. (Quand je dis « la variable locale est supprimée ». Techniquement, le [implicite] contenant la variable est ne plus rien référence et est disponible pour la collecte des ordures, la collecte effective peut se produire plus tard)

Javascript a en effet le garbage collection. Le mot-clé delete signifie quelque chose totalement différent en Javascript que dans, disons, C++. Les objets Javascript ont des propriétés. Vous pouvez supprimer complètement une propriété d'un objet en utilisant delete, par exemple:

var obj = {}; // Blank object 
obj.foo = 5; // `obj` now has a property called `foo` 
obj.foo = null; // `obj` STILL has a property called `foo`; its value is just null now 
delete obj.foo; // `obj` no longer has a property called `foo` 
Questions connexes