The closure variables are bundled into on-heap objects. Since we can statically know a lot about them they are not much like the hidden classes. That is, they are generally more efficient than the hidden classes. Note two things though:
* Using 'eval' and 'with' makes closure-accessed variables (and globals like 'Math') very slow since now there is no static analysis available.
* Some of the tricks that Douglas Crockford is fond of ("private variables with closures") will attach a flock of little closure objects to every JS object. This is going to slow down allocation and bloat their size.
* There's no substitute for benchmarking. With a language as tricky as JS it's easy to hit some special case that isn't optimized and it's difficult to say anything as general as "it's optimized" or "it's not optimized".