Это ошибка, воспроизводимая только из консоли WebKit, у нее возникают проблемы с привязкой контекста вызывающей стороны, когда eval
вызывается из FunctionExpression
.
Когда выполняется прямой вызов eval
, оцененный код, как вы ожидаете, должен совместно использовать обе переменные среды:
(function (arg) {
return eval('arg');
})('foo');
// should return 'foo', throws a ReferenceError from the WebKit console
А также лексическая среда:
(function () {
eval('var localVar = "test"');
})();
typeof localVar; // should be 'undefined', returns 'string' on the Console
В приведенной выше функции localVar
должен быть объявлен в лексической среде вызывающего, а не в глобальном контексте.
Для FunctionDeclaration
s поведение абсолютно нормальное, если мы попробуем:
function test1(arg) {
return eval('arg');
}
test1('foo'); // properly returns 'foo' on the WebKit console
И
function test2() {
eval('var localVarTest = "test"');
}
test2();
typeof localVarTest; // correctly returns 'undefined'
Мне удалось воспроизвести проблему в следующих браузерах, работающих под управлением Windows Vista SP2:
- Chrome 5.0.375.125
- Chrome 6.0.472.25 dev
- Safari 5.0.1
- WebKit Nightly Build r64893