setTimeout - как избежать использования string для обратного вызова?
-
18-09-2019 - |
Вопрос
При использовании setTimeout
, вы должны поместить код , который вы хотите выполнить, в строку:
setTimeout('alert("foobar!");', 1000);
Однако я хочу выполнить функцию, на которую у меня есть ссылка в переменной.Я хочу быть в состоянии сделать это:
var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);
(Хотя в реальной жизни оповещение представляет собой более длинный фрагмент кода и myGreatFunction
передается в качестве параметра другим функциям, в рамках которых setTimeout
называется.)
Конечно, когда срабатывает тайм-аут, myGreatFunction
не является распознанной функцией, поэтому она не выполняется.
Я хотел бы, чтобы javascript позволил мне это сделать, но это не так:
setTimeout(function() { myGreatFunction(); }, 1000);
Есть ли хороший способ обойти это?
Решение
Если тебе не нужно звонить myGreatFunction
с любыми аргументами вы должны быть в состоянии передать setTimeout
ссылка на функцию:
setTimeout(myGreatFunction, 1000);
Кроме того, вам всегда следует избегать прохождения setTimeout
код, который ему необходимо оценить (именно это и происходит, когда вы заключаете код в кавычки).Вместо этого оберните код в анонимную функцию:
setTimeout(function() {
// Code here...
}, 1000);
Смотрите на Страница setTimeout в Центре разработки Mozilla для получения дополнительной информации.
Стив
Другие советы
Кто сказал, что это не позволяет тебе делать это?
Это так, код -
setTimeout(function() { myFunction(); }, 1000);
это совершенно справедливо.