The shadow has pros and cons. I also encountered errors due to finger shading efforts. On the plus side, this can help keep the variable space clean, as @JoelMueller pointed out.
Shadow errors are fundamentally different from mutable errors. They have a typical variety. They are much easier to analyze: the historical loss of information comes down to a lexicographic context and an environmental context. That is, with shadow copying, you can always keep track of the value of the binding by turning the mental stack, while mutation variables create what essentially is gotos (go to address).
In practice, shading still eliminates entire classes of errors. You will not encounter any "creepy actions at a distance." Namely, you will not encounter problems with variables captured in closure or variables that change in nested areas compared to the current area.
source share