setTimeout、setInterval时间设为0会怎样??

setTimeout

话不多说,直接上代码:

console.log('立即执行1--' + new Date().getMilliseconds());
setTimeout(function(){
console.log('延时0ms执行--' + new Date().getMilliseconds());
},0);
console.log('立即执行2--' + new Date().getMilliseconds());

我们看一下打印结果:


image.png

再看下面这段代码:

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

执行结果:


image.png

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种的几率更大:


image.png

image.png

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种几率更大:


image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容