Normally, a binding is in effect throughout a block of a program. But a subblock that redefines the binding makes a hole in the scope of the outer binding; it shadows the outer binding. For example, in
{int x; x = 1; {int x; x = 2; print(x); } print(x); }the inner block is a hole in the scop of the x defined in the outer block. This program fragment will print
2 1