Si vous pouvez alias quelque chose dépend du type de données. Les objets, les tableaux et les fonctions seront traitées par référence et l'aliasing est possible. Les autres types sont essentiellement atomique, et la variable stocke la valeur plutôt qu'une référence à une valeur.
les arguments.le destinataire de l'appel est une fonction, et donc vous pouvez avoir une 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 dites self = function() {return 42;};
alors self
serait alors référence à un autre objet que d' arguments.callee
, ce qui reste une référence pour foo
. Lorsque vous avez un objet composé, l'opérateur d'affectation remplace la référence, il ne change pas la visée de l'objet. Avec des valeurs atomiques, un cas comme celui - y++
est équivalent à y = y + 1
, ce qui est de l'affectation d'un "nouveau" entier à la variable.