Опитвам се да напиша прост код с 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 след определено време, вместо да оценява времето.
Благодаря shaILU
Първо премахнете скобите:
setTimeout(testfunction, 2000);
И след това, ако искате да предадете параметри във функцията setTimeout
, можете да предадете по този начин:
setTimeout(testfunction, 2000, param1, param2);
Забележка: Можете да подадете няколко параметъра според вашите функционални изисквания.
Премахнете скобите, в момента незабавно извиквате функцията. Това, което в момента се предава на setTimeout, е върнатата стойност от извикването на testfunction(), но това, което трябва да предадете на setTimeout като първи аргумент, е препратка към функция
setTimeout(testfunction, 2000);
()
действа като оператор за извикване тук. Но вие искате да предадете функцията наsetTimeout
, а не да я извиквате. - person Šime Vidas   schedule 21.08.2011