Sök…


Syntax

  • timeoutID = setTimeout (funktion () {}, millisekunder)
  • intervalID = setInterval (funktion () {}, millisekunder)
  • timeoutID = setTimeout (funktion () {}, millisekunder, parameter, parameter, ...)
  • intervalID = setInterval (funktion () {}, millisekunder, parameter, parameter, ...)
  • cleartimeout (timeoutID)
  • clearInterval (intervalID)

Anmärkningar

Om fördröjningen inte anges är standardinställningen 0 millisekunder. Men den faktiska förseningen kommer att vara längre än så ; till exempel specificerar HTML5-specifikationerna en minsta fördröjning på 4 millisekunder.

Även när setTimeout anropas med en fördröjning på noll, kommer funktionen som anropas av setTimeout att utföras asynkront.

Observera att många operationer som DOM-manipulation inte nödvändigtvis är slutförda, även om du har gjort operationen och gått vidare till nästa kodsats, så du bör inte anta att de kommer att köras synkront.

Genom att använda setTimeout(someFunc, 0) föreskrivs exekveringen av funktionen someFunc i slutet av den aktuella JavaScript-motorns samtalstack, så funktionen kommer att anropas efter att dessa operationer har slutförts.

Det är möjligt att skicka en sträng som innehåller JavaScript-kod ( setTimeout("some..code", 1000) ) i stället för funktionen ( setTimeout(function(){some..code}, 1000) ). Om koden placeras i en sträng kommer den att analyseras senare med eval() . Time-outs för strängstil rekommenderas inte av prestanda, tydlighet och ibland säkerhetsskäl, men du kan se äldre kod som använder den här stilen. Godkända funktioner har stöds sedan Netscape Navigator 4.0 och Internet Explorer 5.0.

intervaller

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}

window.setInterval(waitFunc,5000);

Ta bort intervall

window.setInterval() returnerar ett IntervalID , som kan användas för att stoppa att intervallet fortsätter att köras. För att göra detta, lagra returvärdet för window.setInterval() i en variabel och ring clearInterval() med den variabeln som det enda argumentet:

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}    

var interval = window.setInterval(waitFunc,5000);

window.setTimeout(function(){
    clearInterval(interval);
},32000);

Detta kommer att logga in This will be logged every 5 seconds var 5: e sekund, men kommer att stoppa det efter 32 sekunder. Så det kommer att logga meddelandet 6 gånger.

Ta bort timeouts

window.setTimout() returnerar en TimeoutID , som kan användas för att stoppa den timeout från att köras. För att göra detta, lagra returvärdet för window.setTimeout() i en variabel och ring clearTimeout() med den variabeln som det enda argumentet:

function waitFunc(){
    console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
    clearTimeout(timeout);
}

var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);

Detta kommer inte att logga meddelandet eftersom timern stoppas efter 3 sekunder.

Rekursiv setTimeout

För att upprepa en funktion på obestämd tid kan setTimeout kallas rekursivt:

function repeatingFunc() {
    console.log("It's been 5 seconds. Execute the function again.");
    setTimeout(repeatingFunc, 5000);
}

setTimeout(repeatingFunc, 5000);

Till skillnad från setInterval garanterar detta att funktionen kommer att köras även om funktionens körtid är längre än den angivna fördröjningen. Det garanterar emellertid inte ett regelbundet intervall mellan funktionsutföranden. Detta beteende varierar också eftersom ett undantag innan det rekursiva samtalet till setTimeout kommer att förhindra att det upprepar igen, medan setInterval skulle upprepas på obestämd tid oavsett undantag.

setTimeout, orderordning, clearTimeout

setTimeout

  • Utför en funktion efter att ha väntat ett visst antal millisekunder.
  • används för att försena exekveringen av en funktion.

Syntax: setTimeout(function, milliseconds) eller window.setTimeout(function, milliseconds)

Exempel: Detta exempel sänder "hej" till konsolen efter 1 sekund. Den andra parametern är i millisekunder, så 1000 = 1 sek, 250 = 0,25 sek, etc.

setTimeout(function() {
    console.log('hello');
}, 1000);

Problem med setTimeout

om du använder metoden setTimeout i en för-loop :

for (i = 0; i < 3; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 500);
}

Detta ger värdet 3 three gånger, vilket inte är korrekt.

Lösning av problemet:

for (i = 0; i < 3; ++i) {
  setTimeout(function(j){
    console.log(i);
  }(i), 1000);
}

Det kommer att mata ut värdet 0 , 1 , 2 . Här överför vi i till funktionen som en parameter ( j ).

Driftsordning

På grund av det faktum att Javascript är enkeltrådat och använder en global setTimeout kan setTimeout användas för att lägga till ett objekt i slutet av exekveringskön genom att ringa setTimeout med noll fördröjning. Till exempel:

setTimeout(function() {
    console.log('world');
}, 0);

console.log('hello');

Skickar faktiskt ut:

hello
world

Också, noll millisekunder här betyder inte att funktionen inuti setTimeout kommer att köras omedelbart. Det kommer att ta lite mer än det beroende på vilka objekt som ska köras kvar i körkön. Den här är bara skjuten till slutet av kön.

Avbryter en timeout

clearTimeout (): stoppar exekveringen av den funktion som anges i setTimeout()

Syntax: clearTimeout (timeoutVariable) eller windows.clearTimeout (timeoutVariable)

Exempel:

var timeout = setTimeout(function() {
    console.log('hello');
}, 1000);

clearTimeout(timeout); // The timeout will no longer be executed

intervaller

Standard

Du behöver inte skapa variabeln, men det är en bra praxis eftersom du kan använda den variabeln med clearInterval för att stoppa det aktuella intervallet.

var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */

Om du behöver skicka parametrar till doSomething-funktionen kan du skicka dem som ytterligare parametrar utöver de två första till setInterval.

Utan överlappning

setInterval, som ovan, körs var 5: e sekund (eller vad du än ställer in det) oavsett vad. Även om funktionen doSomething tar lång tid än 5 sekunder att köra. Det kan skapa problem. Om du bara vill se till att det finns en paus mellan körningar av doSomething kan du göra detta:

(function(){

   doSomething();

   setTimeout(arguments.callee, 5000);

})()


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow