Ситуация:
Я нашел что-то странное в строгом режиме в 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 my code.
(function() {
"use strict"; // I enable strict mode in my own function only.
foo.bar();
alert("done");
})();