Я пытаюсь написать простой код с setTimeout
, но setTimeout
просто не будет ждать положенного времени, и код будет выполнен немедленно. Что я делаю неправильно?
setTimeout(testfunction(), 2000);
Я пытаюсь написать простой код с setTimeout
, но setTimeout
просто не будет ждать положенного времени, и код будет выполнен немедленно. Что я делаю неправильно?
setTimeout(testfunction(), 2000);
Вы немедленно вызываете функцию и планируете ее возвращаемое значение.
Использовать:
setTimeout(testFunction, 2000);
^
Примечание: без скобок.
setTimeout(function() { alert("test"); }, 2000);
- person T.J. Crowder; 21.08.2011
setTimeout(alert, 2000, "test")
, но это не поддерживается IE.
- person pimvdb; 21.08.2011
Удалить скобки
setTimeout(testfunction(), 2000);
Если вы хотите отправить параметры в функцию, вы можете создать анонимную функцию, которая затем вызовет нужную функцию.
setTimeout(function() {
testfunction('hello');
}, 2000);
Изменить
Кто-то предложил отправить строку в качестве первого параметра setTimeout. Я бы предложил не следовать этому и никогда не отправлять строку в качестве первого параметра setTimeout, потому что будет использоваться функция eval. Это плохая практика, и ее следует избегать, если это возможно.
Удалите скобки после имени тестовой функции:
setTimeout(testfunction, 2000);
Причина в том, что первым аргументом setTimeout должна быть ссылка на функцию, а не возвращаемое значение функции. В вашем коде testfunction
вызывается немедленно, а возвращаемое значение отправляется в setTimeout.
setTimeout(testFunction, 2000, obj)
- person Brandon McConnell; 29.05.2021
Ну, вы, возможно, получили ответ, но я объясняю причину и решение. Есть два способа вызвать функцию по прошествии необходимого времени.
1. setTimeout("FUNC_NAME()', TIME_IN_MS);
Здесь FUNC_NAME в двойных кавычках — это исходная функция, которую вы хотите для вызова после TIME_IN_MS миллисекунд. Это потому, что если вы не поместите кавычки, то во время интерпретации java-скрипта функция будет немедленно выполнена, и ваша цель будет побеждена. Чтобы позволить интерпретатору пропустить оператор, нам нужно поставить здесь кавычки.< br> 2. setTimeout(function () {FUNC_NAME ()}, TIME_IN_MS);
Здесь создается анонимная функция, которая сообщает интерпретатору выполнить if через определенное время вместо оценки времени.
Спасибо.
Сначала удалите скобки:
setTimeout(testfunction, 2000);
И затем, если вы хотите передать параметры в функцию setTimeout
, вы можете передать это следующим образом:
setTimeout(testfunction, 2000, param1, param2);
Примечание. Вы можете передать несколько параметров в соответствии с требованиями вашей функции.
Удалите скобки, в настоящее время вы вызываете функцию немедленно. То, что в настоящее время передается в setTimeout, — это возвращаемое значение из вызова testfunction(), но то, что вы должны передать в setTimeout в качестве первого аргумента, — это ссылка на функцию.
setTimeout(testfunction, 2000);
()
действует здесь как оператор вызова. Но вы хотите передать функциюsetTimeout
, а не вызывать ее. - person Šime Vidas   schedule 21.08.2011