[JS] fonction anonyme : optimisable ?

Résolu/Fermé
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 18 sept. 2009 à 18:29
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 18 sept. 2009 à 19:43
Bonjour,
je souhaite enrichir une collection d’objets DOM (des liens) en leur ajoutant une fonction. Voici ma collection :

var links = document.getElementsByTagName("a");

La manière de faire qui m’est tout de suite venue à l’esprit est de rajouter une fonction anonyme à chacun des liens, dans une boucle for.

for (var i=links.length; i--;) {
	links.item(i).foo = function() {
		// …
	}
}

Cependant, j’ai l’intuition qu’en faisant comme suit, je passe référence à une fonction unique au lieu de créer une copie de la fonction pour chaque lien :

function foo() {
	// …
}

for (var i=links.length; i--;) {
	links.item(i).foo = foo;
}

Ce qui devrait occuper moins de mémoire. Mais peut-être que les interpréteurs détectent ce genre de situation et optimisent automatiquement…
Qu’en pensez-vous ?

2 réponses

imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
18 sept. 2009 à 19:19
il est clair que les navigateurs ne peuvent pas optimiser ce genre de duplication de code.

Il vaut mieux en effet, passer par un fonction tierce.
A voir cependant, pour le passage de paramêtre, car la fonction n'a plus comme parent l'objet A ...

Nico
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
18 sept. 2009 à 19:43
Aucun soucis sur ce point, le contexte est passé dynamiquement, ce qui fait que si j'appelle links.item(3).foo(), this réfère bien à links.item(3).
Sinon de toute façon, un petit call résoud tous les problèmes… ^^
0