I’ve heard alot of people saying that accessing the arguments object is expensive. (example: Why was the arguments.callee.caller property deprecated in JavaScript?)
Btw what exactly does that statement mean at all? isn’t accessing the arguments object simply a simple property lookup? what exactly is the big deal?
The big deal is at least twofold:
1) Accessing the arguments object has to create an arguments object. In particular, modern JS engines don’t actually create a new object for the arguments every time you call a function. They pass the arguments on the stack, or even in machine registers. As soon as you touch
arguments, though, they have to create an actual object. This is not necessarily cheap.2) Once you touch the arguments object, various optimizations that JS engines can otherwise perform (e.g. detecting cases in which you never assign to an argument and optimizing that common case) go out the window. Every access to the function arguments, not just ones through
argumentsbecomes much slower because the engine has to deal with the fact that you might have messed with the arguments viaarguments.