https://appf96umjwe7950.pc.xiaoe-tech.com/detail/p_603eeeb8e4b087d11d4e47bc/6

  1. 谈谈你对MVVM的理解?

MVVM模式的作用:解决分层。

MVC:早期作用在后端,后端处理模板和数据再返回给浏览器,浏览器进行渲染。

model view controller

controller:处理业务逻辑(路由)

model:数据

view:渲染视图

MVP:

好处:隐藏controller,使用mvvm简化了数据到视图绑定的过程,可以自动监听变化

mvvm是模仿mvc模式在前端进行分层,手动获取数据操作视图,因为controller负载臃肿,更难维护,将数据自动映射到视图上,不需要经过controller处理。

解决了controller臃肿问题。

  1. 请说一下Vue2及Vue3响应式数据的理解

vue2使用Object.defineProperty把属性都劫持,重新定义,只能劫持已经存在的属性,

=> 数组:

对于多层对象, 需要递归并且重新定义,所以性能差,

vue2的问题 : 属性必须在对象里才能劫持

递归

vue3 不用重写get和set 在取值的时候判断是不是对象,是对象再代理

懒代理 默认不代理 只有取值的时候代理

vue3 data里是数据 希望哪些是响应式的 可以用对应api

响应式数据: 数据变了通知我。

双向数据绑定

  1. Vue中如何检测数组变化

更改数组本身

能改变数组,但是监控不到数组长度

函数劫持

  1. Vue中如何进行依赖收集?

  1. 如何理解Vue中模板编译原理

  1. Vue生命周期钩子是如何实现的

都是回调函数

把他放在一个数组里

合成整个数组 依次执行

  1. Vue的生命周期方法有哪些?一般在哪一步发送请求及原因

  2. Vue.mixin的使用场景和原理

vuex vue-router

  1. Vue组件data为什么必须是个函数?

唯一性 保证组件之间的数据不受影响

  1. nextTick在哪里使用?原理是?

保证在更新完毕后再获取内容,更新的策略是异步的

本身不代表异步,是异步的 但是是将内容维护到一个数组里,最终按照顺序执行,第一次会开启一个异步任务,后续更新是往数组里放,并不是又开启一个异步任务

为什么采用异步更新,希望都改完之后 执行

原理 promise => settimeout

  1. computed和watch区别

底层实现都靠watcher,功能项不一样

computed主要做缓存的,一个属性依赖的数据没有变,他就不会重新计算

watch是数据变了就执行回调

计算属性多了缓存,computed只有取值的时候才执行

initComputed,计算属性实际是个方法,核心object.defineProperty get函数 本身是属性,写成一个函数

计算属性watcher 加了懒加载属性lazy:true,默认第一次不执行

initWatch

vue里有三种watcher : 渲染watcher 计算属性watcher (lazy:true) 用户watcher


江文艺
1k 声望67 粉丝