JS问题整理与思考--什么是event-loop

  • 事件轮询:JS实现异步的具体解决方案
  • 同步代码,直接执行
  • 异步函数先放在异步队列中
  • 待同步函数执行完毕,轮询执行异步队列的函数

异步函数先放在异步队列中

这里,第一个setTimeout并不是直接放到异步队列,而是100毫秒之后

第二个setTimeout放入并执行完成之后,异步队列为空,引擎会一直轮询异步队列,

第一个setTimeout在100ms之后,放入异步队列,并执行

轮询就是,放入异步队列,被拿出来执行,然后再不停检查异步队列,放入函数之后,立刻拿出来执行,然后再检查异步队列

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

示例2

ajax是在success之后,放入异步队列

这里,因为ajax的success返回时间不一定,所以结果就不一定了,可能333要比111早,也可能晚

$.ajax({
    url:'XXX',
    success:function (res) {
        console.log(333);
    }
})
setTimeout(function () {
    console.log(111);
},100)
console.log(222);

随机浏览