La possibilità di creare un alias dipende dal tipo di dati. Oggetti, array e funzioni verranno gestiti per riferimento ed è possibile creare alias. Altri tipi sono essenzialmente atomici e la variabile memorizza il valore piuttosto che un riferimento a un valore.
arguments.callee è una funzione, quindi puoi avere un riferimento ad essa e modificare quell'oggetto condiviso.
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
Nota che se nel codice sopra dovessi dire, self = function() {return 42;};allora selffarebbe riferimento a un oggetto diverso da arguments.callee, che rimane un riferimento a foo. Quando si dispone di un oggetto composto, l'operatore di assegnazione sostituisce il riferimento, non cambia l'oggetto di riferimento. Con valori atomici, un caso simile y++è equivalente a y = y + 1, che assegna un "nuovo" intero alla variabile.