Inkonsistenter Umfang von "use strict" in verschiedenen Webbrowsern (bezüglich arguments.callee und caller)

Situation:

Ich fand etwas Seltsamesstrikter Modus in Javascript.

Ich verwende eine externe Javascript-Bibliothek von Drittanbietern, diewurde minimiert,hat über 4000 Codezeilen,istnicht mituse strict überhaupt undbenutztarguments.callee.ich benutzeuse strict in meinem eigenen Code, der in einer Funktion enthalten ist.

Wenn ich eine der von der Bibliothek bereitgestellten Funktionen aufrufe, wird ein Fehler ausgegeben. Jedoch,

Der Fehler wird nur ausgelöst, wenn ich verwendeuse strictDer Fehler wird in allen Browsern außer Chrome ausgelöstCode:

Ich habe alle nicht verwandten Sachen entfernt und den Code in diese reduziert (Online-Demo auf jsFiddle):

// 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");
})();

Testergebnis:
+-----------------------+-----+--------------------------------------------------------------+
| Browser               | OS  | Error                                                        |
+-----------------------+-----+--------------------------------------------------------------+
| Chrome 27.0.1453.94 m | Win | <<NO ERROR!>>                                                |
| 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 | <<NO ERROR!>>                                                |
| 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    |
+-----------------------+-----+--------------------------------------------------------------+

Hinweis: fürOS, Win = Windows 7,Mac = Mac OS 10.7.5

Mein Verständnis:Alle modernen Desktop-Browser unterstützenuse strict (sehenKann ich benutzen).Dasuse strict Der Gültigkeitsbereich ist in meiner Funktion festgelegt, sodass alle außerhalb des Gültigkeitsbereichs definierten Elemente nicht betroffen sind (sieheDiese Stapelüberlauf-Frage).Frage:

Sind alle Browser außer Chrome falsch? Oder ist es umgekehrt? Oder ist das undefinierte Verhalten so, dass die Browser es in irgendeiner Weise implementieren können?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage