首先了解基本概念,判断是否为同步任务,同步任务放入主线程执行,异步任务则将回调函数放入消息队列中,这里有一个异步进程处理,判断异步任务是否满足条件,如点击事件需要点击才将任务写入消息队列,而定时器是时间到了写入消息队列,当主线程执行完毕后,将消息队列的任务放入主线程执行。
如下所示:
<script>
function fn(){
console.log(0);
}
fn();
console.log(1);
setTimeout(function(){
console.log(2);
},10);
setTimeout(function(){
console.log(4);
},0);
console.log(3);
</script>
输出:
但是,当定时器的时间单位为1时,他会先执行延时时间单位为1的定时器的回调函数而不是延时时间为0.
例:
<script>
function fn(){
console.log(0);
}
fn();
console.log(1);
setTimeout(function(){
console.log(2);
},1);
setTimeout(function(){
console.log(4);
},0);
console.log(3);
</script>
输出: