一个eventloop开始和结束的标志是什么?

最近在看一些vue源码,涉及到eventloop的问题,看了网上的一些文章也是越看越迷。

首先,一个完整的eventloop过程:执行栈执行同步任务->执行栈执行微任务回调->执行栈执行宏任务回调(我的理解),然后在适当时候渲染。

第一个让我不解的点就是:反复执行这个eventloop过程,为何会反复?场景是什么样的?

就拿一个很简单的vue页面来说,从数据监听到页面渲染(包含添加的一些peomisesettimeout等等)这不就是一个完整的eventloop过程?还会再来一个吗?

然后就是那个nextTick说是在下个tick执行,看了下nextTick的源码是用的promisesettimeout异步操作,难道不是跟上面属于一个eventloop?为什么还是下个tick呢?

不知道表达的清不清楚,请各位大佬解惑。
到底何为一个eventloop呢?什么是一个eventloop开始和结束标志呢?

阅读 115
评论
    1 个回答
    • 460
    • Javascript 是单线程的,所有任务都要排队等候处理,如果有些任务非常耗时,将会一直占用着资源,而且CPU也未得到充分的利用。所以我们先将一些任务先挂起,等有返回结果再进行处理,这时候就用到 eventloop 了。
    • JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈(其中会产生微任务和宏任务)。当执行栈为空后,会将任务队列里面取出任务放入执行栈里面执行,如此反复循环。
      撰写回答

      登录后参与交流、获取后续更新提醒