VUE的面试题分享-好程序员-创新互联

  VUE 的面试题 分享- 好程序员, 现在前端面试中会有很多VUE 的面试题, Vue 框架部分小编整理了几个频率比较高的面试题,希望可以帮助到正在面试的你,没准下次的面试里就会出现这个题目哦, web 前端面试中关于 VUE 的面试题(含答案)

创新互联公司服务项目包括罗湖网站建设、罗湖网站制作、罗湖网页制作以及罗湖网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,罗湖网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到罗湖省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

   1 对 MVC 、 MVP 、 MVVM 的理解

   MVC 模式的意思是,软件可以分成三个部分。

   视图(View ):用户界面。

   控制器(Controller ):业务逻辑。

   模型(Model ):数据保存。

   各部分之间的通信方式如下。View 传送指令到 Controller , Controller 完成业务逻辑后,要求 Model 改变状态, Model 将新的数据发送到 View ,用户得到反馈,所有通信都是单向的(逆时针)。

   MVP 模式将 Controller 改名为 Presenter ,同时改变了通信方向。各部分之间的通信,都是双向的(顺时针)。 View 与 Model 不发生联系,都通过 Presenter 传递。 View 非常薄,不部署任何业务逻辑,称为 " 被动视图 " ( Passive View ),即没有任何主动性,而 Presenter 非常厚,所有逻辑都部署在那里。 MVVM 模式将 Presenter 改名为 ViewModel ,基本上与 MVP 模式完全一致。唯一的区别是,它采用双向绑定( data-binding ): View 的变动,自动反映在 ViewModel ,反之亦然。 Angular 和 Ember 都采用这种模式。

   2 如何理解 Vue 是异步执行 DOM 更新的 ?

   Vue 是异步执行 DOM 更新。只要观察到数据变化, Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后,在下一个的事件循环 tick 中, Vue 刷新队列并执行实际 ( 已去重的 ) 工作。 Vue 在内部尝试对异步队列使用原生的 Promise.then 和 MessageChannel ,如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。例如,当你设置 vm.someData = 'new value' ,该组件不会立即重新渲染。

   当刷新队列时,组件会在事件循环队列清空时的下一个 tick 更新。多数情况我们不需要关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员沿着 “数据驱动” 的方式思考,避免直接接触 DOM ,但是有时我们确实要这么做。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

   3 深入响应式原理之如何追踪变化

   当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项, Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转 getter/setter 。

   Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器的原因。这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。这里需要注意的问题是浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,所以你可能需要安装 vue-devtools 来获取更加友好的检查接口。

   每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。观察者订阅了可观察对象,当可观察对象发布事件,则就直接调度观察者的行为,所以这里观察者和可观察对象其实就产生了一个依赖的关系。

   4 说下对 Virtual DOM 算法的理解 ?

   包括几个步骤:

   1 、用 JavaScript 对象结构表示 DOM 树的结构,然后用这个树构建一个真正的 DOM 树,插到文档当中;

   2 、当状态变更的时候,重新构造一棵新的对象树,然后用新的树和旧的树进行比较,记录两棵树差异;

   3 、把 2 所记录的差异应用到步骤 1 所构建的真正的 DOM 树上,视图就更新了。 Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个缓存。可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存:既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存。 CPU ( JS )只操作内存( Virtual DOM ),最后的时候再把变更写入硬盘( DOM )。


文章标题:VUE的面试题分享-好程序员-创新互联
网页网址:http://ybzwz.com/article/dceocs.html