2023年11月25日发(作者:)

前端经典⾯试题vue⾯试题

1.什么是MVVM

1MVVM是⼀种设计思想。

2Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;

3View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是⼀个

4同步View Model的对象。

mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

1mvcmvvm其实区别并不⼤。都是⼀种设计思想。主要就是mvcController演变成mvvm中的

2viewModelmvvm主要解决了mvc中⼤量的DOM 操作使页⾯渲染性能降低,加载速度变慢,影响⽤户

3体验。

4区别:vue数据驱动,通过数据来显⽰视图层⽽不是节点操作。

5场景:数据操作⽐较多的场景,更加便捷

的优点是什么?

低耦合:视图(View)可以独⽴于Model变化和修改,⼀个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不

1

变。

2可重⽤性:你可以把⼀些视图逻辑放在⼀个ViewModel⾥⾯,让很多view重⽤这段视图逻辑。

3独⽴开发:开发⼈员可以专注于业务逻辑和数据的开发(ViewModel),设计⼈员可以专注于页⾯设计。

4可测试:界⾯素来是⽐较难于测试的,⽽现在测试可以针对ViewModel来写。

组件之间传值?

1*⽗组件与⼦组件传值

2⽗组件通过标签上⾯定义传值

3⼦组件通过props⽅法接受数据

4*⼦组件向⽗组件传递数据

5⼦组件通过$emit⽅法传递参数

6*vuex

7*eventbus

8*

9

2vue3区别?vue3vue2优点?

1我们可以概览Vue3的新特性

2速度更快、体积减少、更易维护、更接近原⽣、更易使⽤

3vue3相⽐vue2、重写了虚拟Dom实现、编译模板的优化、

4更⾼效的组件初始化、undate性能提⾼1.3~2倍、

5SSR速度提⾼了2~3

⾯试相关

1vue框架中状态管理。在引⼊store,注⼊。新建⼀个⽬录store….. export 。场景有:单页应⽤中,组件之间的状态。

当触发组件中的某⼀个事件或者⽅法得时候,会通过dispatch分发⼀个消息到actions当中,action会进⾏异步请求数据,当数据请求回来的时候,会通过commit提交到

2

mutations当中,在mutations当中去改变state当中的状态。状态改变以后会映射组件也发⽣改变。

31Vuex 是⼀个专为 设计的状态管理模式

4Vuex 是⼀个专为 应⽤程序开发的状态管理模式

5•解决了组件之间同⼀状态的共享问题 (解决了不同组件之间的数据共享)

6•2.组件⾥⾯数据的持久化。

7.v-showv-if指令的共同点和不同点

1v-show指令是通过修改元素的displayCSS属性让其显⽰或者隐藏

2v-if指令是直接销毁和重建DOM达到让元素显⽰和隐藏的效果

-alive的作⽤是什么?

1 包裹动态组件时,会缓存不活动的组件实例,

2主要⽤于保留组件状态或避免重新渲染。

中引⼊组件的步骤?

11)采⽤ES6import ... from ...语法或CommonJSrequire()⽅法引⼊组件

22)对组件进⾏注册,代码如下

3// 注册

ent('my-component', {

5template: '

A custom component!
'})

63)使⽤组件

-router有哪⼏种导航钩⼦?

1三种,⼀种是全局导航钩⼦:Each(to,from,next),作⽤:跳转前进⾏判断拦截。

1三种,⼀种是全局导航钩⼦:Each(to,from,next),作⽤:跳转前进⾏判断拦截。

2第⼆种:组件内的钩⼦;

3第三种:单独路由独享组件

11.⽣命周期相关⾯试题

1总共分为8个阶段创建前/后,载⼊前/后,更新前/后,销毁前/后。

21-beforeCreate 初始化之后

32-created 创建完成

43-beforeMount 挂载之前

54-mounted 被创建

65-beforeUpdate 数据更新前

76-updated 被更新后

87-activated

98-deactivated

109-beforeDestroy 销毁之前

1110-destroyed 销毁之后

Vue 实例从创建到销毁的过程,就是⽣命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom渲染、更新渲染、卸载等⼀系列过程,我们称这是 Vue 的⽣命

12

周期。

12.第⼀次页⾯加载会触发哪⼏个钩⼦?DOM 渲染在 哪个周期中就已经完成?

1*第⼀次页⾯加载时会触发 beforeCreate, created, beforeMount, mounted 这⼏个钩⼦

2*DOM 渲染在 mounted 中就已经完成了。

13.举例说出⼏种vue当中的指令和它的⽤法?

1v-if:判断是否隐藏;

2v-for:数据循环;

3v-bind:class:绑定⼀个属性;

4v-model:实现双向绑定

5v-html:更新元素的innerHTML

6v-showv-if

7

-loader是什么?使⽤它的⽤途有哪些?

1解析.vue⽂件的⼀个加载器。

2⽤途:js可以写es6style样式可以scsslesstemplate可以加jade

15.为什么使⽤key

1当有相同标签名的元素切换时,需要通过 key 特性设置唯⼀的值来标记以让Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。

16.v-if v-for 可以⼀起使⽤吗?如果不可以,为什么?

Vue 处理指令时,v-for v-if 具有更⾼的优先级,通过v-if 移动到容器元素,不会再重复遍历列表中的每个值。取⽽代之的是,我们只检查它⼀次,且不会在 v-if 为否

1

的时候运算 v-for

是什么?虚拟 DOM是什么?

1Vue 页⾯上渲染的节点,及其⼦节点称为虚拟节点 (Virtual Node)”,简写为“VNode”虚拟 DOM”是由 Vue 组件树建⽴起来的整个 VNode 树的称呼。

2.xvue3.x双向数据绑定的原理?

1数据变化更新视图,视图变化更新数据。其中,View变化更新Data,可以通过事件监听的⽅式来实现,所以 Vue数据双向绑定的⼯作主要是如何根据Data变化更新View

2Vue 是利⽤的 Property()⽅法进⾏的数据劫持,利⽤ setget 来检测数据的读写。

3Vue2.x采⽤的是Property()⽅法

4Vue3.0实现数据的双向绑定原理:采⽤的是Proxy⽅法,proxy是个对象

5proxyProperty好在哪⾥?

6可以直接监听数组的变化;可以直接监听对象⽽⾮属性;Proxy返回的是⼀个新对象,可以只操作新的对象达到⽬的,⽽Property只能遍历对象属性直接修改

Property的优势:A.兼容性好,⽀持IE9,⽽Proxy的存在浏览器兼容性问题,⽽且⽆法⽤polyfill磨平。

$nextTick作⽤是什么?

在下次 DOM 更新循环结束之后执⾏延迟回调。在修改数据之后⽴即使⽤这个⽅法,获取更新后的 DOM。简单的说就是再DOM操作时,vue的更新是异步的,$nextTick

1

是⽤来知道什么时候 DOM 更新完成的。

20.$route$router的区别?

1$route路由信息对象,包括pathparamsqueryname等路由信息参数。⽽$router路由实例对象包括了路由的跳转⽅法,钩⼦函数等

的两个核⼼是什么(数据驱动、组件系统。)

1数据驱动:Property和存储器属性: gettersetter

2ViewModel,保证数据和视图的⼀致性。

3组件系统:应⽤类UI可以看作全部是由组件树构成的。

路由和history路由的区别?

1hash路由在地址栏URL上有#,⽽history路由没有会好看⼀点;

我们进⾏回车刷新操作,hash路由会加载到地址栏对应的页⾯,⽽history路由⼀般就404报错了(刷新是⽹络请求,没有后端准备时会报错)。history运⽤了浏览器的历史

2

记录栈

sessionStoragelocalStorage的区别?

1localStorage:存储持久数据,浏览器关闭后数据不会丢失,除⾮主动删除数据。

2sessionStorage:数据在当前浏览器窗⼝关闭后⾃动删除。

3cookie:设置的cookie过期时间之前⼀直有效,即使窗⼝关闭或浏览器关闭。

4cookie数据时钟在同源的http请求中携带(即使不需要),即会在浏览器和服务器之间传递。

5seeeionStoragelocalStorage不会⾃动把数据发给服务器,仅在本地保存。

edwatch的区别?

1computed是计算属性,会根据依赖的数据动态显⽰新的计算结果,计算后的值会被缓存,当依赖的值改变的时候,才会更新新的计算后的值

2watch 就相当于是⼀个 data 的数据监听回调,当依赖的 data 的数据变化就会执⾏回调

25.页⾯刷新后,vuex中的数据丢失

1js代码是运⾏在内存中的,代码运⾏时的所有变量、函数也都是保存在内存中的。进⾏刷新页⾯的操作,以前申请的内存被释放

解决思路:这些数据要想存储就必须存储在外部,例如:Local StorageSession StorageIndex DB等。这些都是浏览器提供的API,让你可以将数据存储在硬盘上,做

2

持久化存储。

26.图⽚懒加载和路由懒加载?

1图⽚懒加载:可视区域加载,就是只加载⽤户可以看到的区域,这个主要由监控滚动条来实现,在没进⼊可视区域的时候,我们先不给这个标签赋 src 属性。

2路由懒加载:1. vue异步组件

3component: resolve => require(['@/pages/ShopCar'],resolve)

42. webpack()

5component: r => ([], () => r(require('@/pages/GoodsDetailPage')), 'demot')

27.跨域问题如何解决?

1通过jsonp跨域

2nodejs中间件代理跨域: vue框架的跨域部分配置

3

是什么?在中的安装使⽤步骤是?有哪⼏⼤特性?

1css的预编译。

2使⽤步骤:

3第⼀步:先装css-loadernode-loadersass-loader等加载器模块

4第⼆步:在build⽬录找到,在那个extends属性中加⼀个拓展.scss

5第三步:在同⼀个⽂件,配置⼀个module属性

6第四步:然后在组件的style标签加上lang属性 ,例如:lang=”scss”

7特性:

8可以⽤变量,例如($变量名称=值);

9可以⽤混合器,例如()

10•可以嵌套