Why regions exist
Without regions, every name in a program would be one shared pool, and a function that used a common letter would break anything else that used it. Regions make each call independent, which is what lets a program be built from pieces at all.
Reading a program by scope
Find where a name was made, and that region is the only place it can be read. If a name is not in the region you are looking at, it belongs to an outer one or it is a bug. Following this rule is how you find the value a line really uses.