vue相关的高频面试题

本文深入探讨了Vue.js中的关键概念,包括mvvm与mvc的区别、响应式数据原理、Vue 3与Vue 2在响应式数据方面的改进、模板编译流程、Mixin的使用场景与优缺点、Data为何必须是函数、NextTick实现原理、Vue.set的实现、虚拟DOM的理解、Diff算法的原理、组件渲染和更新流程、普通插槽与作用域插槽的差异、Keep-alive的使用场景及原理、Vue Router的模式对比、Vuex的理解、以及npm run命令的工作方式。此外,还涉及JavaScript基础和面试题,涵盖类型校验、浮点数精度问题、new操作符、箭头函数与普通函数的区别以及如何修改this的指向。
摘要由CSDN通过智能技术生成

mwvm与mvc的区别

MVVM和MVC都是常见的软件架构模式,它们有些类似,但也有一些区别。

MVC(Model-View-Controller)是一种软件架构模式,将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。其中,模型是应用程序的核心组件,表示应用程序的数据和业务逻辑;视图是应用程序的用户界面,表示数据的外观;控制器负责处理用户输入和数据流,将用户请求传递给模型并更新视图。MVC将应用程序分为不同的关注点,使得应用程序更易于开发、测试和维护。

MVVM(Model-View-ViewModel)是一种基于MVC的软件架构模式,它的核心是ViewModel。ViewModel是一个用于展示数据并与用户交互的中间层,它连接了视图和模型。与MVC不同的是,MVVM中的ViewModel负责将模型数据转换为视图所需的格式,以及接收和处理用户输入。这使得视图与模型之间的耦合度更低,也更易于开发和维护。

因此,MVVM和MVC的区别在于MVVM多了一个ViewModel层,这一层的作用是将模型数据转换为视图所需的格式,并且将用户输入传递给模型。这样可以使得视图和模型之间的耦合度更低,也使得应用程序更易于开发和维护。

在vue中,对响应式数据的理解

在 Vue 中,响应式数据是指当 Vue 实例中的数据发生变化时,Vue 会自动检测并且通知相关的组件进行视图的重新渲染。

Vue 实现响应式数据的核心是通过 Object.defineProperty() 方法来定义一个属性的 getter 和 setter。在 Vue 中,每个组件实例都有一个自己的响应式数据对象,称之为 data 对象。当 data 中的属性被访问时,Vue 会通过 getter 来跟踪这个属性,并且将组件实例添加到一个订阅者列表中。当这个属性被修改时,Vue 会通过 setter 来更新这个属性,并且通知订阅者列表中的组件实例进行重新渲染。

使用响应式数据可以让 Vue 实现数据与视图的双向绑定,当数据发生变化时,视图会自动更新,反之亦然。同时,使用响应式数据也可以让开发者更加方便地管理数据状态,因为不需要手动进行 DOM 操作,而是让 Vue 自动管理视图更新。不过需要注意的是,由于 Vue 的数据劫持机制是通过 Object.defineProperty() 方法来实现的,所以对于数组的变化,需要使用 Vue 提供的一些特殊方法(如 push()、splice() 等)来触发响应式更新。

vue3和vue2相比,在响应式数据做了哪些改变

1.使用 Proxy 替代 Object.defineProperty()

在 Vue 3 中,响应式数据的实现使用了 Proxy 对象代替了 Object.defineProperty() 方法。相比于 Object.defineProperty(),Proxy 对象具有更加强大和灵活的功能,可以直接代理整个对象而不仅仅是其中的属性,并且支持动态的属性添加和删除。

2.支持嵌套属性的监听

在 Vue 3 中,对于对象和数组中嵌套的属性,也可以进行监听和响应式更新。这使得 Vue 3 可以更加方便地管理复杂的数据结构,并且可以对任何深度的数据进行响应式更新。

3.改进了数组的响应式更新

在 Vue 3 中,对于数组的响应式更新进行了优化和改进,使用了类似于 React 的机制来避免不必要的重新渲染。同时,Vue 3 也提供了一些新的 API(如 toRefs()、reactive() 等)来更加方便地处理数组的响应式更新。

4.改进了初始化的性能

在 Vue 3 中,对于初始化时的性能进行了优化,使用了懒初始化的方式来避免不必要的性能消耗。这意味着只有在组件实际需要使用响应式数据时才会进行初始化,而不是在组件创建时立即进行初始化。这使得 Vue 3 可以更加高效地处理大型和复杂的组件。

综上所述,Vue 3 在响应式数据方面进行了许多重大改进,这些改进使得 Vue 3 更加灵活、高效和易用,可以更好地应对复杂的数据结构和大型的应用程序。(vue2中,Options API 是主要的编写组件代码的方式,而vue3是Composition API,但是在 Vue 3 中,Options API 仍然是可以使用的)

在vue中,模板编译的流程(如何从 template 转为真实Dom)

在 Vue 中,模板编译的流程主要包括以下几个步骤:

1.解析模板

Vue 的模板编译器会将模板字符串解析为抽象语法树(AST),这个过程会识别模板中的各种语法结构,如标签、属性、指令等。

2.生成渲染函数

根据解析出来的 AST,Vue 的模板编译器会生成对应的渲染函数。渲染函数是一个返回虚拟 DOM 的函数,它描述了如何将组件渲染成最终的 HTML。

3.优化渲染函数

在生成渲染函数之后,Vue 会对渲染函数进行一些优化,以提高渲染性能。这些优化包括静态节点提升、事件侦听器缓存等。

4.创建虚拟 DOM

当组件需要被渲染时,Vue 会调用渲染函数来生成虚拟 DOM(Virtual DOM),虚拟 DOM 是一个描述真实 DOM 的 JavaScript 对象。

5.更新虚拟 DOM

当组件中的数据发生变化时,Vue 会重新调用渲染函数来生成新的虚拟 DOM。Vue 会通过比较新旧虚拟 DOM 的差异,来计算出需要更新的部分,然后再把这些部分更新到真实 DOM 中。

6.渲染真实 DOM

最后,Vue 会把更新后的虚拟 DOM 渲染成真实 DOM,并把它插入到文档中。

综上所述,Vue 的模板编译的流程可以简单地概括为:解析模板、生成渲染函数、优化渲染函数、创建虚拟 DOM、更新虚拟 DOM、渲染真实 DOM。

在vue中,Mixin 的使用场景与优缺点

Mixin 是一种在 Vue 中用于共享组件逻辑的方式。它允许我们在多个组件中复用相同的代码片段,从而提高代码的复用性和可维护性。

Mixin 的使用场景:

  1. 多个组件有相似的功能逻辑,但是不想重复编写代码。
  2. 想在一个组件中复用另一个组件的功能逻辑。

Mixin 的优点:

  1. 提高代码复用性:Mixin 可以让我们在多个组件中复用相同的代码片段,减少重复代码的编写。
  2. 提高可维护性:Mixin 可以将组件逻辑分离出来,降低代码的耦合性,提高代码的可维护性。
  3. 提高开发效率:Mixin 可以让我们快速地实现组件逻辑,节省开发时间。

Mixin 的缺点:

  1. 命名冲突:如果多个 Mixin 中定义了相同的属性或方法,会造成命名冲突,导致程序出错。
  2. 代码复杂度:如果使用过多的 Mixin,会导致代码变得复杂和难以维护。
  3. 状态管理困难:由于 Mixin 中的状态可能被多个组件使用,因此状态管理可能会变得困难。

综上所述,Mixin 可以提高代码的复用性和可维护性,但是需要注意命名冲突、代码复杂度和状态管理等问题。在使用 Mixin 时,应该合理地选择 Mixin,避免滥用和过度依赖。

在vue中,Data 为什么必须是个函数

在 Vue 组件中,如果 Data 选项是一个纯对象,则会造成所有组件实例之间共享该对象的数据。这意味着,如果一个组件修改了该对象的属性,那么所有其他组件中使用该对象的属性也会被修改,从而导致程序出现难以预料的行为。

为了避免这种情况的发生,Vue 强制 Data 选项必须是一个返回一个对象的函数。每个组件实例会调用该函数并返回它自己的数据对象,这样每个组件实例都会有一个独立的数据对象,从而避免了数据共享的问题。

简单来说,Data 必须是一个函数,这样每次创建一个新的组件实例时,都会为该实例创建一个新的数据对象,从而避免了数据共享的问题。如果 Data 是一个对象,那么所有组件实例将共享同一个数据对象,导致数据冲突。

在vue中,NextTick 如何实现的,什么是宏/微任务及宏/微任务的种类,宏/微任务的执行顺序

Vue 中的 nextTick() 方法是用来在 DOM 更新完成后执行回调函数的方法。在 Vue 的响应式更新过程中,有时需要在 DOM 更新完成后才能执行一些操作,例如获取 DOM 元素的位置信息等。这时就可以使用 nextTick() 方法来延迟执行这些操作,以确保在 DOM 更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你怎么在吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值