2:
setTimeoutsetInterval
JavaScript Node.js
setTimeout
:
let timerId = setTimeout(func|code, delay[, arg1, arg2...])
:
func|codedelay- (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);
alertChrome 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)delayfunc/ setInterval/setTimeoutclearInterval/clearTimeout-
setTimeoutsetInterval setTimeout(func, 0)setTimeout(func- 5
setTimeoutsetInterval4ms
:
- CPU
()300ms1000ms
<code><pre>10(plnkr, JSBin, codepen)