三段讲清楚$nextTick原理

浏览器的任务执行区分为执行栈和任务栈,所有任务执行完并渲染UI,一次称为一个tick,在下一次更新数据之前,立即触发$nextTick的延迟回调方法,返回值是更新后的最新dom。

执行栈中的所有同步任务执行完后,会从任务队列中读取异步任务进来,修改等待状态,开始执行,所有异步任务执行完以后,执行$nextTick的延迟回调方法。

基于以上两点,加上dom更新是一个异步方法,即保证浏览器要在所有更新数据的任务执行之后才能执行$nextTick的延迟回调方法。所以在created生命周期中,由于挂载dom节点的方法没有执行完,所以无法获取并操作真实dom,次数就需要使用$nextTick方法进行获取。

另外说一下任务队列的任务调度方式。任务队列分为宏任务队列和微任务队列,每次优先执行完微任务队列里的所有任务后,再去调用一个宏任务,这个宏任务执行完之后再看微任务队列有没有任务,有就循环执行完,没有就继续调用宏任务队列里的任务,以此循环,直到所有任务队列里的任务都被执行完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容