Можно ли использовать псевдоним для чего-либо, зависит от типа данных. Объекты, массивы и функции будут обрабатываться по ссылке, возможно использование псевдонимов. Другие типы по сути атомарны, и переменная хранит значение, а не ссылку на значение.
arguments.callee - это функция, поэтому вы можете иметь ссылку на нее и изменять этот общий объект.
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
Обратите внимание, что если бы в приведенном выше коде вы сказали, self = function() {return 42;};тогда selfбы он ссылался на другой объект, чем arguments.callee, который остается ссылкой на foo. Когда у вас есть составной объект, оператор присваивания заменяет ссылку, он не изменяет упомянутый объект. С атомарными значениями такой вариант y++эквивалентен y = y + 1, что переменной присваивается «новое» целое число.