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