Po zaktualizowaniu do Firefoksa 7 otrzymuję następujący błąd:

Oświadczenie funkcji wymaga nazwy

Te szczególne funkcje są zdefiniowane jako

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

Jeśli przepiszę to jako:

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

Błąd nie pojawia się już, ale program nadal nie działa.

PS. - Wiem, że ocena sznurka nie jest dobrym pomysłem. Jest to starsza aplikacja, którą muszę naprawić, w którym niektóre funkcje są pobierane z bazy danych jako sznurków na żądanie.

2
Hernan 28 wrzesień 2011, 16:03

4 odpowiedzi

Najlepsza odpowiedź

Owinąć go w wsporniki

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

Ale to nie ma sensu, ponieważ nic nie robi. Może chcesz:

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

Lub

eval("var func = function (item) { };");
5
Petah 28 wrzesień 2011, 12:05

Deklaracja funkcji (jest tym, czego tam masz) wymaga identyfikatora przez specyfikację.

function() {
}

Podobnie jak to nie jest dozwolone przez specyfikację ES (nawet jeśli niektóre przeglądarki mogą się jej pozwolić). Tylko wyrażenie funkcji może być anonimowe.

2
jAndy 28 wrzesień 2011, 12:09

Zgadnij, może spróbuj z:

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

(Właśnie dodałem wyciąg powrotny)

0
mateusz.fiolka 28 wrzesień 2011, 12:09

Jeśli funkcja jest zdefiniowana jako łańcuch i chcesz go użyć bez wywołania eval za każdym razem, możesz to zrobić:

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

Lub tylko

var myFunc = 'function(){alert("myFunc");}';    
var fun = eval('('+myFunc+')');
fun();
0
b-dur 30 wrzesień 2011, 13:08