2010-08-23 3 views
0
window.global_array = new Array(); 
window.example = function() 
{ 
    var x = new Object(); 
    x['test_property'] = 3; 
    global_array.push(x); 
} 

gourous Javascript, s'il vous plaît répondre à trois questions:va javascript supprimer mon var malgré référence mondiale

  1. sera javascript supprimer x à la fin du champ de retour lorsque exemple(), ou le conserver à l'intérieur global_array.
  2. Puis-je supposer que javascript fonctionne comme «tout est une référence» en python?
  3. Toutes les machines virtuelles sont-elles créées de manière égale ou bien les règles GC varient-elles en fonction de l'implémentation?
+0

Cette question est vraiment peu claire. Que signifie "supprimer" meen? GC'd? – noah

+0

retirer de la mémoire l'objet référencé par x – amwinter

Répondre

4
  1. Oui. x sera supprimé, car sa portée est limitée au corps de la fonction (vous avez utilisé le mot-clé var, ce qui garantit cela.Les variables déclarées sans var seront globales, même dans un corps de fonction). Cependant, la valeur continuerait d'être présente dans global_array.
  2. Pas entièrement. Les objets (tableaux, aussi!) Sont passés comme références, les valeurs primitives (comme les nombres) seront copiées.
  3. GC variera selon la mise en œuvre, mais cela ne devrait pas vous concerner. Les implémentations JavaScript se comporteront de la même manière, sauf s'il y a un bug.

Depuis x fait référence à un objet, l'affectation (par push()) augmente le nombre de références. Lorsque x sort du champ d'application à la fin de la fonction, cela ne réduit pas le nombre de références à 0, donc l'objet sera toujours là - sa seule référence maintenant à l'intérieur de global_array.