Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 13:46 Der er 22 kommentarer og
1 løsning

Forskel på SetInterval() og SetTimeout()

Titlen siger alt:
Hvad er forskellen på SetInterval() og SetTimeout()?
Avatar billede grunken Nybegynder
08. februar 2004 - 13:56 #1
setTimeout udfører en handling en gang efter et givent antal millisekunder :o)

setInterval udfører en handling flere gange med et defineret antal millisekunder imellem, ind til denne bliver afbrudt, med clearInterval
Avatar billede skovenborg Nybegynder
08. februar 2004 - 13:57 #2
setInterval() aktiverer en funktion igen og igen efter et givent antal millisekunder. setTimeout aktiverer en funktion én gang efter et givent antal millisekunder - altså en forsinkelse.
Avatar billede skovenborg Nybegynder
08. februar 2004 - 13:57 #3
LOL - kunne ikke være mere enig med dig grunken ;-)
Avatar billede grunken Nybegynder
08. februar 2004 - 13:59 #4
hehe :o)

skovenborg, du må altså øve dig i at skrive lidt hurtigere, du har jo altid de rette svar :o)
Avatar billede grunken Nybegynder
08. februar 2004 - 14:02 #5
bemærk ligheden *G*
Avatar billede skovenborg Nybegynder
08. februar 2004 - 14:06 #6
*GG* - er gået i gang med nogle fingre-opvarmningsøvelser. ;-)

I grunden så tror jeg folk bliver forvirrede over forskellen på grund af den måde man bruger de to forskellige metoder på.
For eksempel eksekveres denne funktion én gang i sekundet:
function foo() {
    window.status = new Date();
    window.setTimeout('foo();',1000);
}
Det er dog imidlertidig bare fordi funktionen hele tiden bliver udført med en forsinkelse på et sekund hver gang funktionen når til sin ende.
Avatar billede grunken Nybegynder
08. februar 2004 - 14:12 #7
du har helt ret skovenborg :o), de ligger meget op af hinanden de funktioner, da man uden problemer kan få dem til at agere ens, men alt efter behovet, så er setInterval klart smartest hvis noget skal udføres mange gange :o)
Avatar billede skovenborg Nybegynder
08. februar 2004 - 14:18 #8
jep, men man skal passe lidt på alligevel. Hvis du skriver:
function foo() {
    window.status = new Date();
    timer = window.setInterval('foo();',1000);
}
så bliver det noget rod - (i dette tilfælde kan det godt være man ikke kan se forskel, men rent faktisk begynder funktionen at køre igen og igen - med mindre og mindre tidsmellemrum). Alternativet her er at skriver:
function foo() {
    window.status = new Date();
}
timer = window.setInterval('foo();',1000);

setInterval() og setTimeout() giver nemlig helt andre resultater når de først kaldes inde i selve funktionen i forhold til andre steder på siden.
Avatar billede skovenborg Nybegynder
08. februar 2004 - 14:23 #9
jo vent - man kan godt se en forskel.
function foo() {
    window.status = new Date();
    timer = window.setInterval('foo();',1000);
}
Denne funktion fik min browser til at gå ned - nogenlunde samme virkning som et infinity loop.
Avatar billede grunken Nybegynder
08. februar 2004 - 14:29 #10
Ville nu heller aldrig køre en Timeout, eller Interval inde fra en funktion uden at have clearet det eksisterende indhold inden, og du har ret, på et eller andet sted burde ovenstående give overflow :o)

men prøv:

function foo() {
    window.status = new Date();
    clearInterval(timer)
    timer = window.setInterval('foo();',1000);
}

Det burde ikke hænge den :o)
Avatar billede skovenborg Nybegynder
08. februar 2004 - 14:33 #11
ahh, ja se det var da også en fin løsning.

Det skal måske også lige nævnes at en timeout også kan "cleares" med clearTimeout() på sammen måde som man bruger clearInterval() :-)
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 18:14 #12
Ok, i får 5 p hver. kan man også aktivere flere funktioner med setInterval():
a = 0;
window.setInterval("if(a++ == 5)foo()", 1000); // Aktiverer foo() 5 gange
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 18:18 #13
Sorry,
a = 0;
window.setInterval("if(a++ <= 5)foo()", 1000); // Aktiverer foo() 5 gange
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 18:21 #14
Når jeg prøver setInterval, udfører den det kun 1 gang.
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 18:23 #15
smid et svar...
Avatar billede skovenborg Nybegynder
08. februar 2004 - 19:07 #16
du skal hellere gøre sådan her:
var a = 0;
var timer;
function foo() {

    window.status = a; // Eller hvordan din funktion nu ser ud
    if (a++ >= 5) window.clearInterval(timer);
}
timer = window.setInterval("foo();",1000);

Du kan nemlig ikke gøre det på den anden måde, da javascript-parseren (den der læser scriptet) kun kommmer forbi window.setInterval("if(a++ <= 5)foo()", 1000); én gang - og derfor tester den jo også kun én gang. Så du kan ikke umiddelbart gøre det på den måde.
Du kunne også bare gøre sådan her:
var a = 0;
function foo() {

    alert(a);
    if (++a <= 5) window.setTimeout("foo();",1000);
}
foo();
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 19:13 #17
Ok, tak for den oplysing, hvilket jeg i øvrigt rigtig godt kan bruge, men det var ikke svar på mit spørgsmål. Nå, lige meget. Hvis Grunken nu lige smider et svar, så accepterer jeg...
Avatar billede skovenborg Nybegynder
08. februar 2004 - 19:32 #18
hmm, rent faktisk virker:
a = 0;
window.setInterval("if(a++ <= 5)foo()", 1000);
for mig - ud over at du skal skrive if(++a <= 5) eller if(a++ < 5) i stedet hvis du skal udføre den 5 gange. Så jeg tog faktisk fejl med min tidligere påstand ;-)
Hvis det ikke virker så er det måske mere noget med din funktion du kalder. Prøv fx at skrive:
function foo() {
        alert("FOO");
}
a = 0;
window.setInterval("if(a++ <= 5)foo()", 1000);
Det virker fint nok :-)
Avatar billede mikoalngelo Nybegynder
08. februar 2004 - 20:05 #19
Ja, du har ret. Jeg kunne bare ikke se output'et, fordi document.write overskrev tallet hele tiden. Jeg prøvede med alert(); og det virkede.

Grunken, smid et svar.
Avatar billede grunken Nybegynder
08. februar 2004 - 23:32 #20
Nope's, det er klart skovenborgs points :o)
Avatar billede skovenborg Nybegynder
08. februar 2004 - 23:35 #21
du var da ellers først med det egentlige svar !-)
Avatar billede grunken Nybegynder
08. februar 2004 - 23:41 #22
Jeps men du var mest ihærdig :o)

Roger ude :o)

btw. skovenborg, du har vist taget lidt roenving til dig med de smileyes *G*
Avatar billede skovenborg Nybegynder
09. februar 2004 - 00:14 #23
*LOL* - ja, man bliver jo påvirket af den mand. Godt man ikke kan tage patent på sådan noget ;-)
Så nu når jeg er i gang kan jeg ligeså godt afslutte på ægte roenvingvis:

-- velbekomme '-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester