[ Web Proxy ]
URL:
Viewing: https://zh.javascript.info/settimeout-setinterval [Back]  [Original]

setTimeout setInterval
:
Light themeDark theme
DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

setTimeout setInterval

scheduling a call

  • setTimeout
  • setInterval

JavaScript Node.js

setTimeout

let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)

func|code
delay
1000 = 1 0
arg1arg2
IE9

sayHi() 1

function sayHi() {
  alert('Hello');
}

setTimeout(sayHi, 1000);

function sayHi(phrase, who) {
  alert( phrase + ', ' + who );
}

setTimeout(sayHi, 1000, "Hello", "John"); // Hello, John

JavaScript

setTimeout("alert('Hello')", 1000);

setTimeout(() => alert('Hello'), 1000);

()

// 
setTimeout(sayHi(), 1000);

setTimeout sayHi() setTimeout sayHi() undefined

clearTimeout

setTimeout timer identifier timerId

let timerId = setTimeout(...);
clearTimeout(timerId);

let timerId = setTimeout(() => alert("never happens"), 1000);
alert(timerId); // 

clearTimeout(timerId);
alert(timerId); //  null

alert Node.js

HTML5 timers section

setInterval

setInterval setTimeout

let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)

setTimeout setInterval

clearInterval(timerId)

2 5

//  2 
let timerId = setInterval(() => alert('tick'), 2000);

// 5 
setTimeout(() => { clearInterval(timerId); alert('stop'); }, 5000);
alert

Chrome Firefox alert/confirm/prompt

alert alert alert 2

setTimeout

setInterval setTimeout

/** instead of:
let timerId = setInterval(() => alert('tick'), 2000);
*/

let timerId = setTimeout(function tick() {
  alert('tick');
  timerId = setTimeout(tick, 2000); // (*)
}, 2000);

setTimeout (*)

setTimeout setInterval

server 5 102040

let delay = 5000;

let timerId = setTimeout(function request() {
  ......

  if (request failed due to server overload) {
    //  2 
    delay *= 2;
  }

  timerId = setTimeout(request, delay);

}, delay);

CPU

setTimeout setInterval

setInterval

let i = 1;
setInterval(function() {
  func(i++);
}, 100);

setTimeout

let i = 1;
setTimeout(function run() {
  func(i++);
  setTimeout(run, 100);
}, 100);

setInterval 100 func(i++)

[]

setInterval func

func

func 100

JavaScript func

delay

setTimeout

[]

setTimeout 100

setInterval/setTimeout callback

setInterval/setTimeout GC

// 
setTimeout(function() {...}, 100);

setInterval clearInterval

setTimeout

setTimeout(func, 0) setTimeout(func)

func

Hello World

setTimeout(() => alert("World"));

alert("Hello");

calendar0 "Hello" "World"

0 timeout

HTML5 5 4

setTimeout times

let start = Date.now();
let times = [];

setTimeout(function run() {
  times.push(Date.now() - start); // 

  if (start + 100 < Date.now()) alert(times); // 100 
  else setTimeout(run); // 
});

// 
// 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100

9, 15, 20, 24... 4 timer start 1 0

setInterval setTimeoutsetInterval(f) f 4

JavaScript Node.js setImmediate

  • setTimeout(func, delay, ...args) setInterval(func, delay, ...args) delay func delay func
  • clearInterval/clearTimeout setInterval/setTimeout
  • setTimeout setInterval
  • setTimeout(func, 0) setTimeout(func)
  • setTimeout setInterval 4ms

  • CPU

300ms 1000ms

: 5

printNumbers(from, to) from to

  1. setInterval
  2. setTimeout

setInterval

function printNumbers(from, to) {
  let current = from;

  let timerId = setInterval(function() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }, 1000);
}

// 
printNumbers(5, 10);

setTimeout

function printNumbers(from, to) {
  let current = from;

  setTimeout(function go() {
    alert(current);
    if (current < to) {
      setTimeout(go, 1000);
    }
    current++;
  }, 1000);
}

// 
printNumbers(5, 10);

1000ms

function printNumbers(from, to) {
  let current = from;

  function go() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }

  go();
  let timerId = setInterval(go, 1000);
}

printNumbers(5, 10);
: 5

setTimeout for 100

alert

let i = 0;

setTimeout(() => alert(i), 100); // ?

//  >100ms
for(let j = 0; j < 100000000; j++) {
  i++;
}

setTimeout

i 100000000

let i = 0;

setTimeout(() => alert(i), 100); // 100000000

//  >100ms
for(let j = 0; j < 100000000; j++) {
  i++;
}


Web Proxy Viewer  |  New URL  |  Original Page