没有合适的资源?快使用搜索试试~ 我知道了~
三十七个常见Vue面试题,背就完事了-2023
需积分: 1 1 下载量 96 浏览量
2023-02-26
20:10:15
上传
评论
收藏 35KB DOCX 举报
温馨提示
试读
11页
三十七个常见Vue面试题,背就完事了-2023
资源推荐
资源详情
资源评论
一、谈谈你对 MVVM 的理解?
映射关系简化,隐藏 controller MVVM 在 MVC 的基础上,把控制层隐藏掉了。
Vue 不是一个 MVVM 框架,它是一个视图层框架。
ViewModal 是一个桥梁,将数据和视图进行关联。
二、谈谈你对 Vue 中响应式数据的理解?
数组和对象类型的值变化的时候,通过 defineReactive 方法,借助了
defineProperty,将所有的属性添加了 getter 和 setter。用户在取值和设置
的时候,可以进行一些操作。
缺陷:只能监控最外层的属性,如果是多层的,就要进行全量递归。
get 里面会做依赖搜集(dep[watcher, watcher]) set 里面会做数据更新
(notify,通知 watcher 更新)
三、Vue 中如何检测数组的变化?
vue 中对数组没有进行 defineProperty,而是重写了数组的 7 个方法。 分别
是:
� push
� shift
� pop
� splice
� unshift
� sort
� reverse
因为这些方法都会改变数组本身。
数组里的索引和长度是无法被监控的。
四、Vue 中如何进行依赖收集的?
Vue 初始化的时候,挂载之后会进行编译。生成 renderFunction。
当取值的时候,就会搜集 watcher,放到 dep 里面。
当用户更改值的时候,就会通知 watcher,去更新视图。
五、如何理解 Vue 中的模板编译原理?
这个问题的核心是如何将 template 转换成 render 函数。
1. 将 template 模块转换成 ast 语法书 - parserHTML
2. 对静态语法做标记(某些节点不改变)
3. 重新生成代码 - codeGen,使用 with 语法包裹字符串
六、Vue 生命周期钩子是如何实现的?
Vue 的生命周期钩子是回调函数,当创建组件实例的过程中会调用相应的钩子
方法。 内部会对钩子进行处理,将钩子函数维护成数组的形式。
七、Vue 组件生命周期有哪些?
� beforeCreate 在实例初始化之后,数据观测 observer 和 event、
watcher 事件配置之前被调用
� created 实例已经创建完成,在这一步,以下配置被完成
o 数据观测
o 属性和方法的运算
o watch/event 时间回调
o $el 尚未生成
� beforeMount 在挂载之前被调用,render 尚未被调用
� mounted el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用
� beforeUpdate 数据更新时,被调用,发生在虚拟 Dom 重新渲染和打补丁
之前
� update 由于数据更改导致的虚拟 Dom 重新渲染和打补丁,在这之后调用
� beforeDestroy 实例销毁之前调用
� destroyed 实例销毁之后调用,调用后 Vue 实例的所有东西都会被解
绑,所有的事件监听会被移除,子实例被销毁,该钩子在服务端渲染期
间不被调用
� keep-alive(activated & deactivated)
八、vue.mixin 的使用场景和原理?
Vue 的 mixin 的作用就是抽离公共的业务逻辑,原理类似对象的继承,当组件
初始化的时候,会调用 mergeOptions 方法进行合并,采用策略模式针对不同的
属性进行合并。 如果混入的数据和本身组件的数据有冲突,采用本身的数据为
准。
缺点:命名冲突、数据来源不清晰
九、Vue 的组件 data 为什么必须是一个函数?
new Vue 是一个单例模式,不会有任何的合并操作,所以根实例不必校验 data
一定是一个函数。 组件的 data 必须是一个函数,是为了防止两个组件的数据
产生污染。 如果都是对象的话,会在合并的时候,指向同一个地址。 而如果
是函数的时候,合并的时候调用,会产生两个空间。
十、请说明 nextTick 的原理。
nextTick 是一个微任务。
� nextTick 中的回调是在下次 Dom 更新循环结束之后执行的延迟回调
� 可以用于获取更新后的 Dom
� Vue 中的数据更新是异步的,使用 nextTick 可以保证用户定义的逻辑在
更新之后执行
十一、computed 和 watch 的区别是什么?
� computed 和 watch 都基于 watcher 来实现的。
� computed 的属性是具备缓存的,依赖的值不发生变化,对其取值时计算
属性方法不会重复执行
� watch 是监控值的变化,当值发生改变的时候,会调用回调函数
十二、Vue.set 方法是如何实现的?
� vue 给对象和数组本身都增加了 dep 属性
� 当给对象新增不存在的属性的时候,就会触发对象依赖的 watcher 去更
新
� 当修改数组索引的时候,就调用数组本身的 splice 方法去更新数组
十三、Vue 为什么要用虚拟 Dom
剩余10页未读,继续阅读
资源评论
力哥讲技术
- 粉丝: 858
- 资源: 105
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功