It turns out that changing the value of an argument variable will change its
value in the arguments
"array":
> function hello(what) {
. what = "world";
. return "Hello, " + arguments[0] + "!";
. }
> hello("shazow")
"Hello, world!"
This is documented behaviour (see NOTE 1 in §10.6 Arguments Object of ECMA-262).
I suspect, without evidence, that this allows named argument value lookups to
be transformed at compile time into a lookup into the arguments
array (so,
for example, the what = "world";
would be transformed into arguments[0] = "world"
; much like Python's fast locals).