title: Some complex behaviour with 'with' statement and call
body: <pre><code>var a = ({
      x: 10,
      foo: function () {
          function bar() {
              console.log(x);
              console.log(y);
              console.log(this.x);
          }
          with (this) {
              var x = 20;
              var y = 30;
              bar.call(this);
          }
      }
  }).foo();
  </code></pre>
  
  <p>Results in <strong>undefined, 30, 20</strong>.</p>
  
  <p>Would be greatly appreciated to get some step by step debug-style explanation of how this works.</p>