Почему метод выполняется немедленно, когда я использую setTimeout?

Я пытаюсь написать простой код с помощью setTimeout, но setTimeout просто не будет ждать времени, которое это предполагает, и код будет выполнен немедленно. Что я делаю неправильно?

setTimeout(testfunction(), 2000);

Ответ 1

Вы вызываете функцию немедленно и планируете ее возвращаемое значение.

Использование:

setTimeout(testFunction, 2000);
                       ^

Примечание: нет парнеров.

Ответ 2

Снимите круглую скобку

setTimeout(testfunction(), 2000);

Если вы хотите отправить параметры функции, вы можете создать анонимную функцию, которая затем вызовет нужную функцию.

setTimeout(function() {

    testfunction('hello');

}, 2000);

Edit

Кто-то предложил отправить строку в качестве первого параметра setTimeout. Я бы предложил не следовать этому и никогда не отправлять строку в качестве первого параметра setTimeout, потому что функция eval будет использоваться. Это плохая практика, и ее следует избегать, если это возможно.

Ответ 3

Удалите скобки после имени тестовой функции:

setTimeout(testfunction, 2000);

Причина в том, что первым аргументом setTimeout должна быть ссылка на функцию, а не возвращаемое значение функции. В вашем коде testfunction вызывается немедленно, и возвращаемое значение отправляется в setTimeout.

Ответ 4

Хорошо, что у вас есть ответ, но я объясняю причину и решение. Есть два способа, которыми вы можете вызывать функцию после необходимого количества времени.

1. setTimeout ( "FUNC_NAME()", TIME_IN_MS);
 Здесь FUNC_NAME внутри двойных кавычек - это оригинальная функция, которую вы хотите вызывать после TIME_IN_MS миллисекунд. Это связано с тем, что если вы не ставите кавычки, тогда, когда java script получает интерпретацию, функция будет немедленно выполнена, и ваша цель будет побеждена. Чтобы интерпретатор пропустил утверждение, нам нужно поставить кавычки здесь. 2. setTimeout (function() {FUNC_NAME()}, TIME_IN_MS);
 Здесь создается анонимная функция, которая сообщает интерпретатору выполнить, если после определенного времени вместо оценки времени.

Спасибо shaILU