Niespójny zakres „ścisłego stosowania” w różnych przeglądarkach internetowych (dotyczących argumentów.callee i wywołującego)

Sytuacja:

Znalazłem coś dziwnegotryb ścisły w Javascript.

Korzystam z zewnętrznej, zewnętrznej biblioteki JavaScript, którazostał zminimalizowany,ma ponad 4000 linii kodu,jestnie za pomocąuse strict w ogóle, ijest używanearguments.callee.ja używamuse strict w moim własnym kodzie, w zasięgu funkcji.

Gdy wywołam jedną z funkcji udostępnianych przez bibliotekę, zgłasza błąd. Jednak,

błąd jest generowany tylko wtedy, gdy używamuse strictbłąd jest generowany we wszystkich przeglądarkach oprócz ChromeKod:

Usunąłem wszystkie niepowiązane rzeczy i zredukowałem kod do tego (demo online na 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");
})();

Wynik testu:
+-----------------------+-----+--------------------------------------------------------------+
| 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    |
+-----------------------+-----+--------------------------------------------------------------+

Uwaga: dlaOS, Win = Windows 7,Mac = Mac OS 10.7.5

Moje zrozumienie:Obsługuje wszystkie nowoczesne przeglądarki komputerów stacjonarnychuse strict (widziećMogę uzyć).Theuse strict jest w zasięgu mojej funkcji, więc nie ma to wpływu na wszystko zdefiniowane poza jego zakresem (zobaczto pytanie o przepełnienie stosu).Pytanie:

Czy wszystkie przeglądarki oprócz Chrome są nieprawidłowe? Czy jest odwrotnie? Czy może jest to niezdefiniowane zachowanie, aby przeglądarki mogły go wdrożyć w dowolny sposób?

questionAnswers(1)

yourAnswerToTheQuestion