🛸 Shadowing
Useful resources:
What is shadowing ?
When you have two or more variables, each in different scope, with the same lexical names.
The city variable (parameter) at line 3 shadows the variable city at line 1. That's why re-assignment of city at line 4 only affects the inner variable, not the outer one.
Illegal Shadowing
Not all combinations of declaration shadowing are allowed. let can shadow var, but var cannot shadow let
var at line 4 is trying to 'cross the boundary' of let declaration.