JavaScript运行机制(二) 事件循环
<script>
// process.nextTick与setImmediate方法
//process.nextTick(): 这个方法node里面才能够运行,在浏览器中运行不了
//这个方法什么时候执行呢? 它是在同步代码执行之后,异步代码执行之前,执行的。
process.nextTick(()=>{
console.log(1)
})
console.log(2);
setTimeout(()=>{console.log(3)},0);
console.log(4);
// 1.同步
// 2.process.nextTick()
// 3.异步
//所以输出2,4,1,3
</script>
<script>
//setImmediate():当前事件循环结束执行
// 1.同步
// 2.process.nextTick()
// 3.异步
// 4.setImmediate()
setImmediate(()=>{
console.log(1)
})
process.nextTick(()=>{
console.log(2)
})
console.log(3);
setTimeout(()=>{console.log(4)},0);
console.log(5);
//所以输出:3,5,2,4,1
</script>
setImmediate(()=>{
console.log(1)
})
process.nextTick(()=>{
console.log(2)
})
console.log(3);
setTimeout(()=>{console.log(4)},0);
setTimeout(()=>{console.log(5)},1000);
setTimeout(()=>{console.log(6)},0);
console.log(7);
//输出:3,7,2,4,6,1,5
//经过很多次循环才能轮到这个5,因为一开始循环的时候,他会先把4,和6,放入任务队列中,进行执行,执行之后,
//过了一秒后,就把5放进来,然后事件循环看到有5了,就执行了
1. // 回到之前说的为啥计算器有时不准呢
//这个计时器到点了之后,然后把它放入任务队列中,这就是有时候计时器有的时候会晚,会不准,它到点了,不会立即执行,而是先放入任务队列中,
//而这个任务队列中什么时候执行,是要看运行栈中有没有执行完,执行完后,它前面有没有任务,它前面有任务还得执行它前面的任务,都执行完,它才能够去执行,所以不准。
</script>
总结:
执行顺序
1.同步
2.process.nextTick()
3.异步
4.setImmediate(当前事件循环结束执行 )