Я пытаюсь написать простой код с помощью setTimeout
, но setTimeout
просто не будет ждать времени, которое это предполагает, и код будет выполнен немедленно. Что я делаю неправильно?
setTimeout(testfunction(), 2000);
Я пытаюсь написать простой код с помощью setTimeout
, но setTimeout
просто не будет ждать времени, которое это предполагает, и код будет выполнен немедленно. Что я делаю неправильно?
setTimeout(testfunction(), 2000);
Вы вызываете функцию немедленно и планируете ее возвращаемое значение.
Использование:
setTimeout(testFunction, 2000);
^
Примечание: нет парнеров.
Снимите круглую скобку
setTimeout(testfunction(), 2000);
Если вы хотите отправить параметры функции, вы можете создать анонимную функцию, которая затем вызовет нужную функцию.
setTimeout(function() {
testfunction('hello');
}, 2000);
Edit
Кто-то предложил отправить строку в качестве первого параметра setTimeout. Я бы предложил не следовать этому и никогда не отправлять строку в качестве первого параметра setTimeout, потому что функция eval будет использоваться. Это плохая практика, и ее следует избегать, если это возможно.
Удалите скобки после имени тестовой функции:
setTimeout(testfunction, 2000);
Причина в том, что первым аргументом setTimeout должна быть ссылка на функцию, а не возвращаемое значение функции. В вашем коде testfunction
вызывается немедленно, и возвращаемое значение отправляется в setTimeout.
Хорошо, что у вас есть ответ, но я объясняю причину и решение. Есть два способа, которыми вы можете вызывать функцию после необходимого количества времени.
1. setTimeout ( "FUNC_NAME()", TIME_IN_MS);
Здесь FUNC_NAME внутри двойных кавычек - это оригинальная функция, которую вы хотите вызывать после TIME_IN_MS миллисекунд. Это связано с тем, что если вы не ставите кавычки, тогда, когда java script получает интерпретацию, функция будет немедленно выполнена, и ваша цель будет побеждена. Чтобы интерпретатор пропустил утверждение, нам нужно поставить кавычки здесь.
2. setTimeout (function() {FUNC_NAME()}, TIME_IN_MS);
Здесь создается анонимная функция, которая сообщает интерпретатору выполнить, если после определенного времени вместо оценки времени.
Спасибо shaILU