The object of the with can have properties that collide with local variables, it can drastically change the meaning of your program :

with (foo) {
  var x = 3;
  return x;
}

The local variable x could be clobbered by a property of foo and perhaps it even has a setter, in which case assigning 3 could cause lots of other code to execute.

Never use the with statement.