setTimeout(fn,0)的秘密

485 阅读1分钟

这个奇怪的代码干什么的?

开始看到这段代码,一脸懵逼。为啥直接执行。

原理探究

js是单线程的,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。 setTimeout(fn,0)就是加到任务队列里面

demo

setTimeout(function(){
    console.log(1);
}, 0);
console.log(2);
console.log(3);

这样,这段代码输出结果为2 , 3 ,1。就得到了解释,因为setTimeOut设置为0,会在队列最后添加一个事件,要等待其他任务事件处理完成才会处理,所以 1 才会最后打印;

总结

让人懵逼的代码都是每理解原理的~~~