2009-04-28 16 views
12

Podczas korzystania setTimeout, trzeba umieścić kod, który chcesz wykonać na ciąg znaków:setTimeout - jak uniknąć używania ciągu znaków do wywołania zwrotnego?

setTimeout('alert("foobar!");', 1000); 

Jednakże chcę wykonać funkcję, do której mam odniesienie w zmiennej. Chcę być w stanie to zrobić:

var myGreatFunction = function() { alert("foobar!"); }; 
// ... 
setTimeout('myGreatFunction();', 1000); 

(. Chociaż w prawdziwym życiu, alarm jest dłuższe nieco kodu i myGreatFunction zostanie przeniesiony wokół jako parametr do innych funkcji, w ramach którego setTimeout nazywa)

Oczywiście, gdy upływa limit czasu, myGreatFunction nie jest rozpoznawaną funkcją, więc nie wykonuje.

życzę javascript pozwól mi to zrobić, ale to nie robi:

setTimeout(function() { myGreatFunction(); }, 1000); 

Czy istnieje dobry sposób okrągłe to?

+4

„Podczas używania setTimeout, musisz umieścić kod, który chcesz wykonać w ciągu” Z całą pewnością nie ... w rzeczywistości, _should not_. –

+0

@ Tomalak - tak, masz rację. Zobacz komentarz na odpowiedź Kirtana ...:/ – teedyay

+0

Właściwie to widziałem; chciałem być tu wyraźnie dla kogokolwiek, kto może zobaczyć to pytanie :) –

Odpowiedz

28

Jeśli nie trzeba zadzwonić myGreatFunction wszelkich argumentów, powinieneś być w stanie przejść setTimeout odniesienie funkcję:

setTimeout(myGreatFunction, 1000); 

Ponadto, należy zawsze unikać przechodzenia setTimeout kod, który potrzebuje do oceny (co się dzieje, gdy owijacie kod w cudzysłów). Zamiast owinąć kod w anonimowej funkcji:

setTimeout(function() { 
    // Code here... 
}, 1000); 

Zobacz setTimeout page at the Mozilla Development Centre aby uzyskać więcej informacji.

Steve

14

Kto powiedział, że nie pozwala ci to zrobić?

Czyni kod -

setTimeout(function() { myFunction(); }, 1000); 

jest całkowicie poprawny.

+9

Haha - tak, masz rację. Niezwiązany błąd oznaczał, że moja funkcja nie była wywoływana, kiedy faktycznie była. Pozostawia mnie to w nieco zawstydzającej sytuacji, gdy chcę poddać pod głosowanie moje własne pytanie ... – teedyay

Powiązane problemy