Default Parameters
What happens if you try to reference a parameter in its own default expression?
If you try to reference a parameter in its own default expression, it will throw a ReferenceError when the function is called without that parameter. For example, with `function broken(x = x) { ... }`, calling `broken()` causes a ReferenceError: "Cannot access 'x' before initialization". This happens because of the Temporal Dead Zone (TDZ)—the period from the start of the block until the variable (parameter in this case) is declared and initialized. During parameter evaluation, each parameter creates a new scope, and the parameter's default value is evaluated within a TDZ for the parameter itself. So when evaluating `x = x`, the `x` on the right side is in the TDZ and cannot be accessed yet. This is different from referring to previously defined parameters, which work fine because they're already initialized when later parameters are evaluated.