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

: setTimeout setInterval
:
Light themeDark theme
DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek
20241023

: setTimeout setInterval

2:

  • setTimeout
  • setInterval

JavaScript Node.js

setTimeout

:

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

:

func|code
delay
(1000 ms = 1 ).
arg1, arg2
(IE9-)

1 sayHi() :

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);

() :

// wrong!
setTimeout(sayHi(), 1000);

setTimeout sayHi() setTimeout sayHi() undefined()

clearTimeout

setTimeout timerId

:

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

:

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

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

alert Node.js

HTML5timers section

setInterval

setInterval setTimeout :

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

setTimeout 1

clearInterval(timerId)

25:

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

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

Chrome Firefox alert/confirm/prompt

alert alert

setTimeout

2

1setInterval 1 setTimeout :

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

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

setTimeout (*)

setTimeout setInterval

5 10, 20, 40

:

let delay = 5000;

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

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

  timerId = setTimeout(request, delay);

}, delay);

CPU

setTimeout setInterval

2 setInterval :

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

2 setTimeout :

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

setInterval 100ms func(i++) :

[]

setInterval func !

func

func 100ms

func

delay ms

setTimeout :

[]

setTimeout ( 100ms)

setInterval/setTimeout

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

setInterval clearInterval

setTimeout

: setTimeout(func, 0) setTimeout(func)

func

Hello World :

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

alert("Hello");

0ms "Hello" "World"

(event loop): microtask macrotask timeout

HTML5 : 54

setTimeout 0ms times :

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

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

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

// :
// 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

setTimeout setInterval : setInterval(f) f 4

JavaScript Node.js process.nextTick setImmediate

  • setInterval(func, delay, ...args) setTimeout(func, delay, ...args) delay func /
  • setInterval/setTimeout clearInterval/clearTimeout
  • setTimeout setInterval
  • setTimeout(func, 0) setTimeout(func
  • 5 setTimeout setInterval4ms

:

  • CPU

()300ms1000ms

: 5

from to printNumbers(from, to)

2

  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);
}

// usage:
printNumbers(5, 10);

setTimeout :

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

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

// usage:
printNumbers(5, 10);

: 4

setTimeout

setInterval :

let i = 0;

let start = Date.now();

function count() {

  if (i == 1000000000) {
    alert("Done in " + (Date.now() - start) + 'ms');
  } else {
    setTimeout(count, 0);
  }

  // a piece of heavy job
  for(let j = 0; j < 1000000; j++) {
    i++;
  }

}

count();
let i = 0;

let start = Date.now();

let timer = setInterval(count, 0);

function count() {

  for(let j = 0; j < 1000000; j++) {
    i++;
  }

  if (i == 1000000000) {
    alert("Done in " + (Date.now() - start) + 'ms');
    clearInterval(timer);
  }

}
: 5

setTimeout 100ms

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

// assume that the time to execute this function is >100ms
for(let j = 0; j < 100000000; j++) {
  i++;
}


Web Proxy Viewer  |  New URL  |  Original Page