从零到一学JS:什么是事件循环

118 阅读1分钟

每日一kun:我的双脚像踩着沙,陷入了有你的那个仲夏

JS代码开始执行,会把代码分成两种任务,同步任务,异步任务,同步任务为主线程,同步任务里面的代码先进行声明提升,然后根据代码从上到下的顺序开始执行。当同步任务全部执行完毕,JS就会去异步的消息队列里面拿取里面正在排队的任务,放到同步任务的主线程里面执行,JS的回调函数为异步,哪怕定时器里面的时间为0,也要等同步任务执行完毕。

image.png

当JS同步任务执行完毕,一直去异步的消息队列里面拿任务放到主线程执行执行的过程叫事件循环。所以JS就算有异步执行策略,本质上还是单线程,还是要等同步任务先执行。

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

结果

image.png

上面的 console.log(1) console.log(3)为同步任务,console.log(2)为异步任务,那怕2 在3前面,也要等3执行完成再执行异步任务。

思考:只有当异步任务真正准备开始的时才会放到异步任务里面,比如当定时器的事件到了,按钮绑定的点击事件触发的函数,当按钮真正点击的时候,函数才会放到异步任务里面,等待事件循环处理。

同步异步就像两条平行线,永不相交,就如同我和你。