Несовместимая область применения «строгого использования» в различных веб-браузерах (в отношении arguments.callee и вызывающей стороны)

Ситуация:

Я нашел что-то странное в отношениистрогий режим в JavaScript

Я использую внешнюю стороннюю библиотеку Javascript, котораябыл минимизирован,имеет более 4000 строк кода,являетсяне с помощьюuse strict на всех, ииспользуетarguments.callee.Я используюuse strict в моем собственном коде, ограниченном внутри функции.

Когда я вызываю одну из функций, предоставляемых библиотекой, она выдает ошибку. Тем не мение,

ошибка выдается только если я используюuse strictошибка выдается во всех браузерах кроме ChromeКод:

Я удалил все несвязанные вещи и сократил код в этом (онлайн демо на 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");
})();

Результат испытаний:
+-----------------------+-----+--------------------------------------------------------------+
| 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    |
+-----------------------+-----+--------------------------------------------------------------+

Примечание: дляOS, Win = Windows 7,Mac = Mac OS 10.7.5

Мое понимание:Все современные настольные браузеры поддерживаютuse strict (видетьМогу ли я использовать).use strict находится в пределах моей функции, поэтому все, что определено вне ее области действия, не затронуто (см.этот вопрос переполнения стека).Вопрос:

Итак, все ли браузеры, кроме Chrome, не правы? Или наоборот? Или это неопределенное поведение, поэтому браузеры могут использовать его в любом случае?

Ответы на вопрос(1)

Ваш ответ на вопрос