Vue面试题2021最新热门面试题(浅答)

vue双向绑定原理

vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的

Object.defineProperty()来实现数据劫持,对应的两个描述属性get和set

例子:

1. 将实例中的data中的内容绑定到输入框以及文本节点当中

2. 当输入框改变时,vm实例中的data的内容也跟着改变

3. data中的内容发生变化的时候,输入框的内容以及文本节点的内容也发生 变化

v-show和v-if区别:

   v-if是通过控制dom节点的存在与否来控制元素的显隐;v-show是通过设置 DOM元素 的display样式

vue生命周期:

   beforeCreate 创建之前

   create 创建成功

   beforeMount 开始加载

   mounted 加载成功

   beforeUpdate 开始更新

   updated 更新完成

   beforeDestroy 销毁之前

   destroyed 销毁完成

组件通信:

props 父传子

events 子组件向父组件发送数据

$emit/$on 通过空的实例实现组件间的通信

路由传参:

两种情况:params 和 query

都可以在目标组件的生命周期里,通过 this.$route 进行获取

Vuex:

    vuex 是 vue 的状态管理器,存储的数组数据是响应式的。但是并不会保存 起来,刷新之后就回到了初始状态,组件间的状态共享: 登录状态

组件间的数据共享: 购物车的数据, 登录的token

修改Elment样式

1.使用 /deep/ 深度修改标签样式

2.添加一个新的style标签不添加scoped属性

3.通过内联样式 或者 绑定类样式覆盖默认样式

4.在静态资源文件夹的style文件夹下新建global.css文件,并在 main.js 中 引入。

computed:

某些数据依赖其他数据进行变动时使用,当data中数据没有发生改变时,我 们调用 computed中函数n次,会进行缓存(执行一次)

watch:

监听机制+事件机制,数据变化的同时进行异步操作或者是比较大的开销时 使用

let conset var区别

var会导致变量泄露,会全局污染

let块级作用域,不会全局污染

const也是块级作用域,声明的常量,值不能改变

箭头函数:

箭头函数是匿名函数,不能作为构造函数,不能使用new

箭头函数没有原型属性

箭头函数内没有arguments,可以用展开运算符...解决

箭头函数的this,始终指向父级上下文(箭头函数的this取决于定义位置父 级的上下文, 跟使用位置没关系,普通函数this指向调用的那个对象

this指向的方法:

函数的调用方式决定了 this 的指向不同

普通函数调用,this 指向 window

构造函数调用, this 指向 实例对象

对象方法调用,this 指向 该方法所属的对象

事件绑定的方法,this 指向 绑定事件的对象

更改this指向的三个方法:

call() 方法、

apply() 方法、与call()非常相似,不同之处在于提供参数的方式,

apply()使用参数数组,而不是参数列表

bind()方法 创建的是一个新的函数(称为绑定函数),与被调用函数有相同 的函数体, 当目标函数被调用时this的值绑定到 bind()的第一个参数上

Get、Post:

GET 请求指定的页面信息,并返回实体主体

POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数 据被包含在请求体中。POST请求会导致新资源的建立/或已有资源的修改。

Get、Post区别:

请求缓存:GET 会被缓存,而post不会

收藏书签:GET可以,而POST不能

保留浏览器历史记录:GET可以,而POST不能

用处:get常用于取回数据,post用于提交数据

安全性:post比get安全

跨域:

跨域是 浏览器 为了安全而作出的限制策略(服务端不涉及到跨域);

浏览器请求必须遵循同源策略,即同域名、同端口、同协议;

解决跨域:

1.CORS跨域 (前端不用动,后端设置Access-Control-Allow-Origin等)

2. JSONP (动态创建script标签)前端适配,后端配合 前后端同时改造

3. 接口代理 通过修改nginx服务器配置实现代理转发,前端修改,后端不 用

垃圾回收机制:

负责管理代码执行过程中使用的内存。垃圾收集器会定期(周期性)找出那 些不在继续使用的变量,然后释放其内存

闭包:

声明在一个函数中的函数,叫做闭包函数

让外部可以访问内部函数变量;

局部变量会常驻在内存中;

可以防止全局变量污染;

会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

MVC:

MVC是 模型(model)-视图(view)-控制器(controller)是一种软件设计典范

控制器接受用户的输入并调用模型和视图去完成用户的需求

MVVM:

是Model-View-ViewModel的缩写。View层是视图层-Model层是指数据模型 -ViewModel 层是视图数据层,一个同步View和Model的对象,MVVM是一 种设计思想。ViewModel通过双向数据绑定把View层和Model层连接起来

双向数据绑定:

用户更新了view,Model的数据也自动被更新了,这种情况就是双向绑定

viewModel(业务逻辑层)负责将数据于视图关联起来实现数据变化后更新视 图,视图变 化后更新数据,它两个主要部分 :监听器和解析器

axios:

特性:

从浏览器中创建 XMLHttpRequests

从 node.js 创建 http请求

支持 Promise API

拦截请求和响应

转换请求数据和响应数据

取消请求

自动转换JSON 数据

客户端支持防御XSRF

封装:

先引入,在要调用的接口重新封装成一个方法暴露出去,把封装的方法 放 在一个api.js文件中,页面就能直接引入,使用方法名调用

Key的作用:

减少DOM的操作 提高效率

javascript: 

有三部分构成,ECMAScript,DOMBOM

DOM:是W3C 的标准是为了操作文档出现的API,document是其一个对象

BOM:是为了操作浏览器出现的 API,window 是其的一个对象

虚拟DOM:

虚拟 DOM 为框架带来了跨平台的能力,实际上它只是一层对真实DOM的 抽象,以 JavaScript 对象作为基础的树,用对象的属性来描述节点,最终 可以通过一系列操作使 这棵树映射到真实环境上

SPA首屏加载:

  浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间

导致加载速度慢的因素:

  网络延时问题

  资源文件体积过大

  资源重复发送请求

  加载脚本的时候,渲染内容堵塞

常见的SPA首屏优化方式:

   减小入口文件积

   静态资源本地缓存

   UI框架按需加载

   图片资源的压缩

   组件重复打包

   开启GZip压缩

   使用SSR

Vue缺点:

1、不支持IE8.0及其以下版本;

2、高阶教程少;

3、生态环境不如其他框架;

4、社区不大;

Vue优化:

1、路由懒加载

2、key保证唯一性

3、去掉编译文件中的 map 调试文件

4、服务端渲染ssr

5、尽量使用轻量级的工具库

6、很多情况下使用v-if替代v-show

7、按需引入需要用到的组件

8、不要写行内样式,避免dom重绘

9、使用 CDN 引入第三方库减少服务器压力

10、SPA页面采用keep-alive缓存组件

11、开启 gzip 打包压缩   后台配合 gzip 访问

12、对于短时间的大量操作(缩放、滚动)使用防抖、节流函数

13、代码精简,去除 console ,可复用的方法、组件提取出来

猜你喜欢

转载自blog.csdn.net/D_evin_/article/details/121919197