web-dev-qa-db-fra.com

Libération de mémoire à partir d'une variable locale en JavaScript

J'ai une fonction JS qui est appelée sur la page toutes les quelques secondes. C'est une chose de mise à jour AJAX. 

En tant que fonction, je déclare des variables locales. Je ne veux pas utiliser les fermetures ni les variables globales pour diverses raisons. 

Je n'avais jamais envisagé cela, mais dois-je libérer/effacer les variables à la fin de la fonction pour libérer de la mémoire ou JS le fera-t-il automatiquement pour moi?

27
Bob

Généralement non. Les variables déclarées avec var sont locales et sont récupérées lors de votre retour. Si vous omettez la variable var, les variables sont globales et l'utilisation du mot clé delete peut être utile pour les variables globales dans certains cas, mais il est généralement préférable de déclarer toutes les variables avec var afin de ne pas polluer l'espace de nom window.

delete peut être utile lors de l’utilisation d’un héritage basé sur un prototype, par exemple:

function myclass() {
    this.variable = 'myvalue'
    ...
    delete this.variable // finished with this variable
}
var inst = new myclass()

Gardez à l'esprit que si inst est supprimé ou devient hors de portée (déchets collectés), tous les attributs qu'il contient seront également supprimés. delete peut également être utile pour supprimer des éléments de tables de hachage:

var d = {}
d['blah'] = 'myvalue'
...
delete d['blah']

Il y a quelques-uns bogues de récupération de place spécifiques au navigateur. IE a parfois des problèmes pour nettoyer les attributs dans les éléments et les fermetures du DOM, etc. par exemple, bien que beaucoup de ces problèmes aient été réduits dans IE8, je crois.

30
cryo

Javascript a la collecte automatique des ordures. Vous n'avez rien besoin de désallouer.

6
Max Shawabkeh

Les variables sont libérées une fois qu'elles sont hors de portée. Dans votre cas, les variables locales déclarées dans votre fonction seront automatiquement libérées par Js Garbage Collector. Vous n'avez pas à vous en soucier.

1
Mahesh Velaga