浏览器的任务执行区分为执行栈和任务栈,所有任务执行完并渲染UI,一次称为一个tick,在下一次更新数据之前,立即触发$nextTick的延迟回调方法,返回值是更新后的最新dom。
执行栈中的所有同步任务执行完后,会从任务队列中读取异步任务进来,修改等待状态,开始执行,所有异步任务执行完以后,执行$nextTick的延迟回调方法。
基于以上两点,加上dom更新是一个异步方法,即保证浏览器要在所有更新数据的任务执行之后才能执行$nextTick的延迟回调方法。所以在created生命周期中,由于挂载dom节点的方法没有执行完,所以无法获取并操作真实dom,次数就需要使用$nextTick方法进行获取。
另外说一下任务队列的任务调度方式。任务队列分为宏任务队列和微任务队列,每次优先执行完微任务队列里的所有任务后,再去调用一个宏任务,这个宏任务执行完之后再看微任务队列有没有任务,有就循环执行完,没有就继续调用宏任务队列里的任务,以此循环,直到所有任务队列里的任务都被执行完。