setTimeout
话不多说,直接上代码:
console.log('立即执行1--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时0ms执行--' + new Date().getMilliseconds());
},0);
console.log('立即执行2--' + new Date().getMilliseconds());
我们看一下打印结果:
再看下面这段代码:
console.log('立即执行1--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时0ms执行--' + new Date().getMilliseconds());
},0);
console.log('立即执行2--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时1ms执行--' + new Date().getMilliseconds());
},1);
console.log('立即执行3--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时50ms执行--' + new Date().getMilliseconds());
},50);
console.log('立即执行4--' + new Date().getMilliseconds());
执行结果:
Javascript是单线程的,执行顺序由上而下,而setTimeout是典型的异步方法,其中的操作会被挂起,直到主队列中的代码执行完成后才开始执行。
setInterval
console.log('立即执行1--' + new Date().getMilliseconds());
var count = 0;
var testIntval = setInterval(function(){
console.log('定时器--'+ new Date().getMilliseconds());
count++;
if(count == 2){
clearInterval(testIntval);
}
},0);
console.log('立即执行2--' + new Date().getMilliseconds());
打印结果有两种,出现第2种的几率更大:
setInterval 和setTimeout比较
console.log('立即执行--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时0ms执行1--' + new Date().getMilliseconds());
},0);
var count = 0;
var testIntval = setInterval(function(){
console.log('定时器1--'+ new Date().getMilliseconds());
count++;
if(count == 1){
clearInterval(testIntval);
}
},0);
setTimeout(function(){
console.log('延时0ms执行2--' + new Date().getMilliseconds());
},0);
执行结果有两种,第1种几率更大: