现在有没有办法实现目标的办法2女共1夫的策略变通方法具体怎么实施

JS 的 事件循环任务队列 其实是理解 nextTick 概念的关键
这个其实有很多优质的文章做了详细介绍,我就简单过过了

以下内容适用于浏览器端 JS,NodeJS 的事件循环机制并不相同

通常認为是 task 的任务源:

  1. 首先开始执行 script 脚本,直到执行上下文栈为空时开始清空 microtask 队列里的任务,队列嘛先入先出,出一个执行一个清空完畢,走事件循环
  2. 事件循环:不断地去取 task 队列的中的一个任务推入栈中执行,并在当次循环里依次清空 microtask 队列里的任务清空之后,可能会觸发页面更新渲染(由浏览器决定)
  3. 之后重复 事件循环 步骤。

Vue 中数据的变化到 DOM 的更新渲染是一个异步过程
此方法便用于在 DOM 更新循环结束之后执行延迟回调。

去除注释其实也只有不到一百来行,整体还是很容易理解的

这里划成 3 个部分介绍。

介绍 引入的模块 和 定义的变量

// noop 空函数,可用作函数占位符
// Vue 内部的错误处理函数
// 以数组形式存储执行的函数
// 遍历函数数组执行每一项函数
 
 
接下来是核心的 异步延迟函數这里不同的 Vue 版本采用的策略其实并不相同。
2.6 版本优先使用 microtask 作为异步延迟包装器
2.5 版本则是 macrotask 结合 microtask。然而在重绘之前状态改变时会有小問题(如 )。此外在事件处理程序中使用 macrotask 会导致一些无法规避的奇怪行为(如,,)。
所以 2.6 版本现在又改用 microtask 了为什么是又呢。洇为 2.4 版本及之前也是用的 microtask。。
microtask 在某些情况下也是会有问题的因为 microtask 优先级比较高,事件会在顺序事件(如 有变通方法)之间甚至在同┅事件的冒泡过程中触发()。
// 核心的异步延迟函数用于异步延迟调用 flushCallbacks 函数
 // 因此,添加一个空计时器“强制”执行 microtask 队列
 


 
nextTick 函数。接受两個参数:
  1. cb 回调函数:是要延迟执行的函数;
 

整体看过来感觉还是比较好理解的吧~ 2.6 版本相比之前简化了一点。




事件处理程序中触发的nextTick 会優先使用 macrotask。感兴趣可自行去末尾的参考地址进行查阅

 


我要回帖

更多关于 实现目标的办法 的文章

 

随机推荐