Si puede alias algo depende del tipo de datos. Los objetos, matrices y funciones se manejarán por referencia y es posible crear un alias. Otros tipos son esencialmente atómicos y la variable almacena el valor en lugar de una referencia a un valor.
argumentos.callee es una función y, por lo tanto, puede tener una referencia a ella y modificar ese objeto compartido.
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
Tenga en cuenta que si en el código anterior dijera que self = function() {return 42;};entonces selfse referiría a un objeto diferente a arguments.callee, que sigue siendo una referencia a foo. Cuando tiene un objeto compuesto, el operador de asignación reemplaza la referencia, no cambia el objeto referido. Con valores atómicos, un caso como y++es equivalente a y = y + 1, que está asignando un 'nuevo' entero a la variable.