当前位置: 首页 > news >正文

北京网站制作设计公司排名手机微信网站模板

北京网站制作设计公司排名,手机微信网站模板,企业建设网站公司简介,wordpress二级菜单调用Vue 使用 nextTick 来确保数据更新后的 DOM 操作在更新完成后执行。其核心逻辑是将回调放到微任务或宏任务队列中#xff0c;确保回调在 DOM 更新完成后执行。 Vue.js 会利用不同的浏览器 API 来模拟 nextTick 的延迟执行#xff0c;通常是通过#xff1a; Promise#x…Vue 使用 nextTick 来确保数据更新后的 DOM 操作在更新完成后执行。其核心逻辑是将回调放到微任务或宏任务队列中确保回调在 DOM 更新完成后执行。 Vue.js 会利用不同的浏览器 API 来模拟 nextTick 的延迟执行通常是通过 Promise在微任务队列中执行。setTimeout在宏任务队列中执行当浏览器不支持 Promise 时。 Vue.js 的 nextTick 会将回调函数放到合适的队列中执行。通过不同的 异步队列机制 来确保在 DOM 更新后执行回调函数。实现方式如下 function nextTick(callback) {if (Promise) {Promise.resolve().then(callback); // 使用 Promise 微任务队列} else if (setImmediate) {setImmediate(callback); // 支持 setImmediate} else {setTimeout(callback, 0); // 最终回退到 setTimeout} }实现流程 回调队列callbacks 用于存储所有通过 nextTick 添加的回调函数。防止重复调用pending 用于标记当前是否已经在等待刷新回调避免重复调用。任务优先级选择Promise 微任务 MutationObserversetTimeout宏任务执行回调flushCallbacks 会执行所有的回调函数并清空队列。 let callbacks []; // 存储回调函数的数组用于收集 nextTick 的回调 let pending false; // 标记当前是否已经在等待刷新回调防止多次触发function flushCallbacks() {pending false; // 重置标记表示已经进入回调执行阶段// 复制回调数组防止在执行回调时继续往 callbacks 里添加新的回调const copies callbacks.slice(0);callbacks.length 0; // 清空原始回调数组// 逐个执行回调函数for (let i 0; i copies.length; i) {copies[i]();} }let timerFunc;// 优先使用 Promise 微任务其次是 MutationObserver最后是 setTimeout if (typeof Promise ! undefined) {const p Promise.resolve(); // 创建一个 resolved 状态的 Promise 实例timerFunc () {p.then(flushCallbacks); // 使用 Promise.then 触发微任务队列中的 flushCallbacks}; } else if (typeof MutationObserver ! undefined) {let counter 1;const observer new MutationObserver(flushCallbacks); // 使用 MutationObserver 监听数据变化触发 flushCallbacksconst textNode document.createTextNode(String(counter)); // 创建文本节点作为观察对象observer.observe(textNode, { characterData: true }); // 监听文本节点的数据变化timerFunc () {counter (counter 1) % 2; // 切换 counter 值触发文本节点变化textNode.data String(counter); // 触发 MutationObserver 回调}; } else {timerFunc () {setTimeout(flushCallbacks, 0); // 最后降级到使用 setTimeout 延迟执行 flushCallbacks}; }function nextTick(cb) {callbacks.push(cb); // 将回调函数存入 callbacks 数组中if (!pending) { // 如果没有待处理的回调任务pending true; // 设置标记防止重复触发timerFunc(); // 调用 timerFunc触发回调执行机制} }callbacks 存储所有传入的回调函数。 pending 标记防止 timerFunc 多次调用确保只在本次任务队列完成后触发。 flushCallbacks 函数会在 timerFunc 被触发时执行清空原数组 callbacks 并执行所有回调函数。 timerFunc 的优先级选择 Promise优先使用 Promise 的 then 方法将 flushCallbacks 放入微任务队列微任务优先于宏任务。MutationObserver在不支持 Promise 时使用 MutationObserver 来监听文本节点变化。每次 timerFunc 被调用都会修改文本节点内容触发 MutationObserver 回调。setTimeout如果以上两种都不支持使用 setTimeout宏任务延迟执行。 nextTick 将传入的回调 cb 存入 callbacks 队列并确保 flushCallbacks 仅被触发一次。
http://www.lakalapos1.cn/news/61650/

相关文章:

  • 网站建设周期与进度安排免费空间如何放网站
  • 哪里找专业做网站的人常熟旅行社建网站
  • 做网站网站名字自己设置吗品牌推广方案模板
  • 新会网站建设公司赣州章贡区邮政编码是多少
  • 网站开发 图片储存上海集团平台app
  • 做注册任务网站源码绿色为主色的网站
  • 外国人可以在中国做网站吗公司产品网站应该怎么做
  • 西安网站开发公司排名免费自动回收的传奇手游
  • 单位网站建设必要性浏览收费网站模板
  • 展台设计网站都有哪些国外开源 企业网站
  • 起名最好的网站排名做自己的网站的好处
  • 怎么让织梦网站适合手机国家企业网查询
  • 文小库公文写作网站做产品类网站有哪些内容
  • 阿里云网站建站高端建网站多少钱
  • 做网站的域名怎样买南宁做网站优化
  • 黑龙江门户网站建设哈尔滨建工建设
  • html5产品展示网站模板东营网上房地产
  • 对外宣传及网站建设文件稿网站开发公司建站源码
  • 高端品牌网站建设明细报价报网站高级?O置
  • 用tp5做网站新城镇建设官方网站
  • 深圳龙霸网站建设物三做网站代管理三年
  • 湘西州住房和城乡建设局网站聚财的公司名字
  • 外贸网站设计制作优化推广泰安网络公司排名
  • 河北网站建设及推广保定建设工程信息网
  • 网站系统繁忙是什么意思wordpress 链接扁平化
  • 烟台百度网站建设推广wordpress静态化设置
  • 焦作网站制作查关键词的排名工具
  • 网站字体标准网页设计心得体会200
  • 网站开发大致需要哪些步骤石家庄网站建设王道下拉棒
  • 筑梦网站建设Linux查找WordPress路径