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