title: Inconsistent scope of "use strict" on different web browsers (concerning arguments.callee and caller)
body: <h3>Situation:</h3>
  
  <p>I found something strange concerning <strong>strict mode</strong> in Javascript.</p>
  
  <ul>
  <li>I am using an external, third-party Javascript library which
  
  <ul>
  <li>was minified,</li>
  <li>has over 4000 lines of code,</li>
  <li>is <strong>not</strong> using <code>use strict</code> at all, and</li>
  <li>is using <code>arguments.callee</code>.</li>
  </ul></li>
  <li>I am using <code>use strict</code> in my own code, scoped within a function.</li>
  </ul>
  
  <p>When I call one of the functions provided by the library, it throws an error. However,</p>
  
  <ul>
  <li>the error is thrown only if I am using <code>use strict</code></li>
  <li>the error is thrown in all browsers except Chrome</li>
  </ul>
  
  <hr>
  
  <h3>Code:</h3>
  
  <p>I've removed all the unrelated stuff and reduced the code into this (<a href="http://jsfiddle.net/fHGd4/" rel="noreferrer">online demo on jsFiddle</a>):</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>// This comes from the minified external JS library.
  // It creates a global object "foo".
  (function () {
      foo = {};
      foo.bar = function (e) {
          return function () {
              var a5 = arguments.callee;
              while (a5) {
                  a5 = a5.caller      // Error on this line in all browsers except Chrome
              }
          }
      }("any value here");
  })();
  
  // Here's my code.
  (function() {
      "use strict";   // I enable strict mode in my own function only.
  
      foo.bar();
      alert("done");
  })();</code></pre>
  </div>
  </div>
  </p>
  
  <hr>
  
  <h3>Test result:</h3>
  
  <pre><code>+-----------------------+-----+--------------------------------------------------------------+
  | Browser               | OS  | Error                                                        |
  +-----------------------+-----+--------------------------------------------------------------+
  | Chrome 27.0.1453.94 m | Win | &lt;&lt;NO ERROR!&gt;&gt;                                                |
  | Opera 12.15           | Win | Unhandled Error: Illegal property access                     |
  | Firefox 21.0          | Win | TypeError: access to strict mode caller function is censored |
  | Safari 5.1.7          | Win | TypeError: Type error                                        |
  | IE 10                 | Win | SCRIPT5043: Accessing the 'caller' property of a function or |
  |                       |     |             arguments object is not allowed in strict mode   |
  | Chrome 27.0.1543.93   | Mac | &lt;&lt;NO ERROR!&gt;&gt;                                                |
  | Opera 12.15           | Mac | Unhandled Error: Illegal property access                     |
  | Firefox 21.0          | Mac | TypeError: access to strict mode caller function is censored |
  | Safari 6.0.4          | Mac | TypeError: Function.caller used to retrieve strict caller    |
  +-----------------------+-----+--------------------------------------------------------------+
  </code></pre>
  
  <p><sup>Note: for <code>OS</code>, <code>Win</code> = Windows 7, <code>Mac</code> = Mac OS 10.7.5</sup></p>
  
  <hr>
  
  <h3>My understanding:</h3>
  
  <ul>
  <li>All modern desktop browsers support <code>use strict</code> (see <a href="http://caniuse.com/use-strict" rel="noreferrer">Can I use</a>).</li>
  <li>The <code>use strict</code> is scoped within my function, so everything defined outside its scope is not affected (see <a href="https://stackoverflow.com/questions/2343608/in-ecmascript5-whats-the-scope-of-use-strict">this Stack Overflow question</a>).</li>
  </ul>
  
  <hr>
  
  <h3>Question:</h3>
  
  <p>So, are all browsers except Chrome wrong? Or is it the other way round? Or is this undefined behaviour so the browsers may choose to implement it in either way?</p>