2009-04-28 7 views
12

При использовании setTimeout, вы должны поставить код, который вы хотите выполнить в строку:setTimeout - как избежать использования строки для обратного вызова?

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

Однако я хочу, чтобы выполнить функцию, к которой у меня есть ссылка на переменную. Я хочу быть в состоянии сделать это:

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

(. Хотя в реальной жизни, предупреждение является длительным битым кодом и myGreatFunction получает роздан в качестве параметра для других функций, в которых setTimeout называется)

Конечно, когда триггеры таймаута, myGreatFunction не является признанной функцией, поэтому она не выполняется.

Я желаю Javascript позвольте мне сделать это, но это не делает:

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

Есть хороший способ обойти это?

+4

«При использовании SetTimeout, вы должны поставить код, который вы хотите выполнить в строку» Вы, безусловно, не ... на самом деле, вы _should not_. –

+0

@ Томалак - да, ты прав. Смотрите комментарий Киртана ...:/ – teedyay

+0

На самом деле я видел это; просто хотел быть явным здесь для всех, кто может видеть вопрос :) –

ответ

28

Если вам не нужно вызывать myGreatFunction с любыми аргументами, вы должны быть в состоянии передать setTimeout функции ссылку:

setTimeout(myGreatFunction, 1000); 

Кроме того, вы всегда должны избегать прохождения setTimeout кода, который необходим для оценки (что происходит, когда вы завершаете код в кавычках). Вместо этого обернуть код в анонимной функции:

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

Смотрите setTimeout page at the Mozilla Development Centre для получения дополнительной информации.

Стив

14

Кто сказал, что это не позволит вам это сделать?

Это делает код -

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

вполне допустимо.

+9

Ха-ха - да, вы правы. Несвязанная ошибка означала, что моя функция не вызывалась, когда она была на самом деле. Это оставляет меня в слегка смущающей позиции, желая проголосовать за собственный вопрос ... – teedyay

Смежные вопросы