Je cherche un peu de code JS ViewModel qui utilise ce modèle pour être en mesure de faire référence à la fermeture extérieure dans le cas où la bibliothèque qui change le pointeur « ce » lors de l'appel d'une fonction comme un rappel (Gotta love JavaScript):Affecter à une variable à l'intérieur d'une fermeture une référence à la fermeture: fuit-elle?
function FruitViewModel {
var that = this; // <-- HERE
this.someCallBack = function() {
that.utilityFunction();
};
this.utilityFunction = function() { }
}
Ma question est la suivante: est-ce que cela causera une fuite de mémoire ou sera-t-elle spécifique à l'implémentation? (par exemple, si la poubelle est collectée à l'envers ou à l'extérieur)
Éditer: Veuillez supposer qu'au moment où le GC considère cet objet pour la collecte, rien ne contient de référence à someCallBack
.
@Ivan: Il existe [des articles comme celui-ci] (http://www.ibm.com/developerworks/web/library/wa-memleak/) qui décrivent des situations similaires et peuvent prêter à confusion. Mais ils se réfèrent à des situations où une référence au membre de votre objet ('someCallback', par exemple) est attachée à un élément DOM, qui a une longue durée de vie et n'est pas collecté. L'ajout de propriétés aux éléments DOM est plus ou moins la même chose que la création de globals, il est donc naturel que cela ne permette pas la collecte. Mais cela n'a pas grand chose à voir avec les fermetures, comme l'implique l'article. – Groo