Javascript анонимные функции в Firefox 7 - PullRequest
2 голосов
/ 28 сентября 2011

После обновления до Firefox 7 я получаю следующую ошибку:

для оператора функции требуется имя

Эта конкретная функция определена как

fun = eval("function (item) { //Function body }");

Если я переписываю это как:

fun = eval("function view(item) { //Function body }");

Ошибка больше не появляется, но программа по-прежнему не работает.

Ps.- Я знаю, что оценкаСтрока не очень хорошая идея.Это устаревшее приложение, которое мне нужно исправить, в котором некоторые функции загружаются из базы данных в виде строк по требованию.

Ответы [ 4 ]

5 голосов
/ 28 сентября 2011

Оберните это в скобки

eval("(function (item) { alert('hello'); })");

Но это не имеет смысла, поскольку ничего не делает.Может быть, вы хотите:

eval("(function () { alert('hello'); })()");

Или

eval("var func = function (item) { };");
2 голосов
/ 28 сентября 2011

Для объявления функции (это то, что у вас есть) требуется идентификатор по спецификации.

function() {
}

, точно так же, как это не разрешено спецификацией ES (даже если некоторые браузеры могут разрешить это в любом случае).Только выражение функции может быть анонимным.

0 голосов
/ 30 сентября 2011

если функция определена как строка и вы хотите использовать ее без вызова eval каждый раз, вы можете сделать это:

var myFunc = 'function(){alert("myFunc");}';    
var fun = eval('(function(){return '+myFunc+'})()');
fun();

Или просто

var myFunc = 'function(){alert("myFunc");}';    
var fun = eval('('+myFunc+')');
fun();
0 голосов
/ 28 сентября 2011

просто предположение, может быть, попробуйте:

fun = eval("return function (item) { //Function body }");

(я только что добавил оператор возврата)

...