来源:B站程序员来了

第一部分:vue基础

1,v-if和v-for的优先级谁更高?同时出现该如何优化性能?

在同级出现的时候,render函数会将v-for和v-if同时渲染在一个名为_l的函数,在该函数的return中有个条件判断,这个条件判断就是v-if,而函数_l就是v-for生成的函数循环,也就是说同时出现v-for优先于v-if。

同时出现的时候,先条件判断,再进行渲染。就是在外层嵌套一个template。此时生成 的源码就是一个三元运算符,先判断条件,条件成立再执行_l函数,否知执行一个_e空函数,表示不渲染。

2,data类型

data分为两个类型:对象和函数

在源码中,当数据进行初始化的时候,首先使用typeof判断data是不是一个函数,如果是,调用getdata挂载到vue实例上,所以组件复用就是这个道理,复用一次调用detdata一次,如果不是函数,执行其本身,对象执行结束就被回收了。

3,key的作用

使用v-for的时候,不使用key,它会将每个标签元素逐一渲染到页面上,使用key之后,由于key使用的diff算法,就是先创建虚拟dom再循环这个虚拟dom,循环好之后在将渲染好的虚拟dom插入到页面上。

key的取值也有讲究,如果数据是不变的,使用index就可以了,如果数据可能会变化,key需要绑定成这个数据唯一标识,这样才能保证重新渲染的时候,使得数据一一对应。

4,vue组件化

从vue组件化的定义,优点,使用场景和注意事项说

定义:

首先会渲染成

最后被vue-loader渲染成一个render函数

5,谈谈你对vue框架设计原理的理解

从两个方面讲:渐进式、易用、灵活和高效

渐进式:vue只是提供一个核心的模块用于满足基本的开发需求,只需要引入vue文件和label文件即可,在需要其他功能的时候,通过npm下载即可,例如路由、vuex等

易用、灵活和高效:vue可以使用很多第三方组件,开发更加简单和高效,同时通过和组件化编程,让vue变得更加灵活。

vue是一个渐进式的JavaScript框架,它只提供开发需要的最基本功能,这个功能就可以满足一般的开发,如果不足以满足开发,可以通过npm下载其他功能,例如路由、vuex等。而且vue有很多的第三方组件,这样开发起来更加高效,通过组件化编程让vue开发变得简单而且灵活。

6,谈谈你对vvm,vpm,mvvm的理解

7,vue组件之间的通信

vue组件之间的通信包括:父子之间的通信,子父之间的通信,兄弟之间的通信,后代组件之间的通信。

父子之间的通信:

props

$on

this.$parent

注入provide(父组件和后代组件)

使用$attrs和$listeners接收父组件转来的属性和方法(只能向下)

子父之间的通信

$emit

refs获取

v-model

插槽(严格意义上说,是父子之间的通信,只是在父页面中将子组件内的数据显示到父组件的插槽内,而父组件不可直接使用该数据)

兄弟之间通信

eventBus

pubsub(发布订阅者模式)

后代组件之间通信:

pubsub(发布订阅者模式)

全部搞定的方式:vuex

但是这个方式主要使用在公共资源上,例如获取用户名密码token,多个页面同时调用同一个接口,购物车的数据共享等可以使用,大型项目为了解耦可以使用,小型项目可以少使用。

8,vue项目优化

i,路由懒加载

ii.keep-alive

iii.使用v-show复用DOM

Ⅳ.避免v-for和v-if同时使用

Ⅴ.无改变的列表数据,请求的时候使用Object.freeze()冻结该数据,有变化的长数据使用分页滚动的方式显示部分数据。

Ⅶ.事件销毁和图片懒加载

Ⅷ.第三方插件按需引入

9,watch和computed的局别、联系和使用场景

10,vue的生命周期

11.nextTick的原理了使用场景

nextTick接收一个回调函数,该回调函数会在DOM加载完毕之后执行。

new Vue({
methods: {
example: function () {
this.message = 'changed'
this.$nextTick(function () {
this.doSomethingElse()
})
}
}
})

注意:回调函数不能使用箭头函数,否则可能导致this不指向vue实例对象。

nextTick的原理:

nextTick使用了html提供的api——mutationObserver构造函数,该函数会在DOM加载完成之后调用:

var ob=new MutationObserver(function(){
console.log("dom加载完毕")
})
var dom=document.getElementById('app')
ob.observer(dom)

12,vue双向绑定原理,vue如何实现响应式(vue2)

vue如何实现响应式:之前写的,就不在这写了

vue响应式原理(也是双向绑定原理)

JavaScript手写v-model,v-model原理实现

第二部分:路由

vue高频面试题的更多相关文章

  1. vue高频面试题(面试路上踩过的坑)

    ### Vue 双向绑定原理 mvvm 双向绑定,采用**数据劫持结合发布者-订阅者模式**的方式,通过 `Object.defineProperty()` 来劫持各个属性的 setter.gette ...

  2. Vue 前端面试题

    Vue 前端面试题 1. 说一下 Vue 的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合“发布者 - 订阅者”模式的方式,通过 Object.defineProperty() ...

  3. vue前端面试题知识点整理

    vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...

  4. vue.js面试题整理

    Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...

  5. Vue 前端面试题[转]

    https://mp.weixin.qq.com/s/Uxhx2dJ1Xbm6N3Gl7wNZNw Vue 前端面试题 游荡de蝌蚪 前端开发 1周前 作者:游荡de蝌蚪 https://segmen ...

  6. 备战“金九银十”10道String高频面试题解析

    前言 String 是我们实际开发中使用频率非常高的类,Java 可以通过 String 类来创建和操作字符串,使用频率越高的类,我们就越容易忽视它,因为见的多所以熟悉,因为熟悉所以认为它很简单,其实 ...

  7. 整理Vue.js 面试题

    Vue.js 面试题整理   Vue项目结构介绍 build 文件夹:用于存放 webpack 相关配置和脚本. config 文件夹:主要存放配置文件,比如配置开发环境的端口号.开启热加载或开启gz ...

  8. Vue.js面试题整理(转载)

    一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI ...

  9. [ 转载 ] vue.js面试题一

    转载自:https://www.cnblogs.com/aimeeblogs/p/9501490.html 如有侵权 联系删除 Vue.js面试题整理 一.什么是MVVM? MVVM是Model-Vi ...

  10. Spring经典高频面试题,原来是长这个样子

    Spring经典高频面试题,原来是长这个样子 2019年08月23日 15:01:32 博文视点 阅读数 719   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...

随机推荐

  1. 手把手教你搭建mongodb分片集群

    本章用的自己的电脑win10 系统  因为工作上的环境也是win的  就没在虚拟机上玩  (ps: 其实上面环境都大同小异) 在MongoDB(版本 6.xx)中,分片是指将collection分散存 ...

  2. win11或win10客户端邮箱账号登录设置

    1.alimall阿里企业邮箱 点击账户 点击添加账户 点击其他账户 输入电子邮箱地址和密码,并点击登录即可 2.Qq邮箱 2.1 点击账户 2.2 点击添加账户 2.3 点击其他账户 2.4 输入电 ...

  3. P1036 [NOIP2002 普及组] 选数

    传送锚点:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,\cdots,x_n\),以及 \(1\) 个整数 \( ...

  4. Android 13 - Media框架(33)- ACodec(九)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 前一节我们学习了Output Format Changed事件是如何上抛并且被处理的,这一节我们紧接着来学习OutputBuffer是如何上抛并且被 ...

  5. 将.net core api 部署成windows服务

    将.net core api 部署成windows服务   参考 https://blog.csdn.net/qq_38762313/article/details/103311944 将NSSM解压 ...

  6. 8.10考试总结(NOIP模拟35)[玩游戏·排列·最短路·矩形]

    所谓人,无论是谁到了最后,都会形单影只. T1 玩游戏 解题思路 可以把序列从 k 位置掰成两个序列. 问题就变成了两个序列从开头走向末尾是否可以保证前缀和之和一直不大于 0 . 并且可以移动到两个序 ...

  7. itest(爱测试) 开源接口测试,敏捷测试管理平台10.0.1

    一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...

  8. k8s——pod探针

    探针 简单理解: 容器内应用的检测机制,根据不同的探针来判断容器应用当前的状态 为什么会需要探针 # 情况一 现在有一个商品的微服务,跑着跑着突然内存溢出,程序崩掉了,外面的pod虽然在,但是也相当于 ...

  9. 图形库使用 Direct3d

    1 里面的数学 矩阵是三角函数组合出来的 旋转的时候 xy 两个变量距离变 第三轴被影响角度 2视锥 远近四棱锥双剪切平面 3 三维点 A点 B点 C点 确定三位坐标 ,初始坐标是坐标中中心值 x,y ...

  10. edge ctrl+c 复制不起作用

    现象: 在edge中选中文字时,按一次ctrl+c,到其它程序ctrl+v,并不是你选中的内容. 需要在edge中按2次ctrl+c才行. --- 当你选中文字时,会出现一个三个点的菜单,点击后会出现 ...