setTimeout - как избежать использования string для обратного вызова?

StackOverflow https://stackoverflow.com/questions/797115

  •  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);

это совершенно справедливо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top