La possibilité de créer un alias dépend du type de données. Les objets, tableaux et fonctions seront gérés par référence et l'alias est possible. Les autres types sont essentiellement atomiques et la variable stocke la valeur plutôt qu'une référence à une valeur.
arguments.callee est une fonction, et vous pouvez donc y faire référence et modifier cet objet partagé.
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
Notez que si dans le code ci-dessus vous deviez dire, self = function() {return 42;};alors selfferait référence à un objet différent de arguments.callee, qui reste une référence à foo. Lorsque vous avez un objet composé, l'opérateur d'affectation remplace la référence, il ne modifie pas l'objet référencé. Avec les valeurs atomiques, un cas comme y++est équivalent à y = y + 1, qui assigne un «nouvel» entier à la variable.