Vue面试题
1、Vue 组件 data 为什么必须是函数
因为 JS 本身的特性带来的,如果 data 是一个对象,那么由于对象本身属于引用类型,当我们修改其中的一个属性时,会影响到所有 Vue 实例的数据。如果将 data 作为一个函数返回一个对象,那么每一个实例的 data 属性都是独立的,不会相互影响了。
2、Vue 中 key 的作用
key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法。使用 key,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。就地复用
有相同父元素的子元素必须有独特的 key。
3、单页面应用的优缺点
- 单页面应用(SPA)
单页面应用(SPA),通俗一点说就是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入,单页面的页面跳转,仅刷新局部资源。
- 多页面应用(MPA)
多页面(MPA),就是指一个应用中有多个页面,页面跳转时是整页刷新
单页面的优点:
• 用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点spa对服务器压力较小
• 前后端分离
• 页面效果会比较炫酷(比如切换页面内容时的专场动画)
单页面缺点:
• 不利于seo 搜索引擎优化
• seo分为站内seo和站外seo。 站内seo 就是指网址内部优化,
• 站外seo。就是网址的外部优化 提高访问量
• 导航不可用,如果一定要导航需要自行实现前进、后退。(由于是单页面不能用浏览器的前进后退功能,所以需要自己建立堆栈管理)
• 初次加载时耗时多
• 页面复杂度提高很多
4、作用域和作用域链?*
作用域:在JS中我们把作用域分为全局作用域和局部作用域(每一个函数的作用域)
作用域链:在一个局部作用域查找变量,会先从当前作用域开始查找,然后逐层向上查找,
如果能找到返回对应的值,找不到的话会抛出一个未定义的错误,我们称这个查找的方式为作用域链
作用域是可以相互嵌套,但是不允许外部作用域访问内部作用域的变量
变量的一个生命周期:全局变量永久保存,局部变量是当前函数执行完成之后自动销毁,也就是他的垃圾回收机制
5、Vuex是什么?
对数据统一进行管理
- state中保存着共有数据,数据是响应式的
- getter可以对state进行计算操作,主要用来过滤一些数据,可以在多组件之间复用
- mutations同步的,修改state中的值
- actions页面通过mapAction异步提交事件到action。action通过commit把对应参数同步提交到mutation。mutation会修改state中对于的值。
- modules:模块化vuex