Escopo inconsistente de “use strict” em diferentes navegadores da Web (sobre arguments.callee e caller)

Situação:

Eu encontrei algo estranho sobremodo estrito em Javascript.

Estou usando uma biblioteca Javascript externa de terceiros quefoi reduzido,tem mais de 4000 linhas de código,énão usandouse strict em tudo, eestá usandoarguments.callee.estou usandouse strict no meu próprio código, com escopo dentro de uma função.

Quando eu chamo uma das funções fornecidas pela biblioteca, isso gera um erro. Contudo,

o erro é lançado apenas se eu estiver usandouse stricto erro é lançado em todos os navegadores, exceto no ChromeCódigo:

Eu removi todas as coisas não relacionadas e reduzi o código para isso (demonstração online no 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");
})();

Resultado do teste:
+-----------------------+-----+--------------------------------------------------------------+
| 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    |
+-----------------------+-----+--------------------------------------------------------------+

Nota: paraOS, Win = Windows 7,Mac = Mac OS 10.7.5

Meu entendimento:Todos os navegadores de desktop modernos suportamuse strict (VejoEu posso usar).ouse strict é escopo dentro da minha função, então tudo definido fora do seu escopo não é afetadoesta pergunta de estouro de pilha).Questão:

Então, todos os navegadores, exceto o Chrome, estão errados? Ou é o contrário? Ou esse comportamento é indefinido, então os navegadores podem optar por implementá-lo de qualquer maneira?

questionAnswers(1)

yourAnswerToTheQuestion