Parameters are initialized one at a time, left to right, and each sits in a Temporal Dead Zone until its own initializer runs. When a defaults to b, b has not been initialized yet, so accessing it throws a ReferenceError. A later parameter may reference an earlier one, but never the reverse.