interview
vue-basics
在 Vue 中如果变量名以 _ 或 开头会有什么问题如何访问到这些值

Vue 基础面试题, 在 Vue 中,如果变量名以 _ 或 $ 开头,会有什么问题?如何访问到这些值?

Vue 基础面试题, 在 Vue 中,如果变量名以 _ 或 $ 开头,会有什么问题?如何访问到这些值?

QA

Step 1

Q:: 在 Vue 中,如果变量名以 _ 或 $ 开头,会有什么问题?如何访问到这些值?

A:: 在 Vue 中,变量名以 _ 或 $ 开头通常是约定俗成的惯例,用来表示该变量或属性是私有的或保留给 Vue 内部使用的。Vue 并不会强制执行这个约定,但为了避免和 Vue 内部属性发生冲突,开发者通常会避免在组件实例中使用这些前缀的变量。要访问这些变量,直接通过 this._variableName 或 this.$variableName 即可。需要注意的是,尽量不要修改这些带有 $ 前缀的变量,因为它们通常用于 Vue 的内部机制,比如 $el, $refs, $emit 等。

Step 2

Q:: Vue 中的响应式原理是如何实现的?

A:: Vue 中的响应式原理是通过数据劫持(data hijacking)和观察者模式(observer pattern)实现的。Vue 在初始化时,通过 Object.defineProperty 方法将每个数据属性转为 getter 和 setter,这样当数据变化时,可以触发依赖更新。Vue 还会为每个响应式对象创建一个依赖(Dep)实例,当数据被访问时,记录依赖关系,而当数据变化时,通知所有依赖进行更新。Vue 3.0 则使用了 Proxy 来实现响应式,这种方式更为高效和灵活。

Step 3

Q:: Vue 中的 computed 和 watch 有什么区别?

A:: computed 和 watch 都用于监听数据的变化并作出响应,但它们的使用场景不同。computed 是计算属性,它会根据依赖的数据进行缓存,只有当依赖的数据变化时,computed 属性才会重新计算,适用于依赖多个数据源并且需要对结果进行缓存的场景。watch 则是侦听器,用于在数据变化时执行特定的回调函数,适用于监听某个数据的变化并执行异步或开销较大的操作。

用途

了解以 _ 或 $ 开头的变量命名约定对于开发者来说非常重要,尤其是在与团队合作或维护大型代码库时。这种约定有助于区分私有变量与公共接口,避免与 Vue 内部属性的冲突,保证代码的可维护性和稳定性。在实际生产环境中,这种命名约定通常用于框架内部的开发,或者当开发者想要明确标识某些变量为私有或不应被外部直接使用时。面试中考察这一内容可以评估候选人对 Vue 内部机制和编码规范的了解程度。\n

相关问题

🦆
Vue 中的生命周期钩子有哪些?每个钩子函数的作用是什么?

Vue 的生命周期钩子包括 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy 和 destroyed。它们分别在组件的不同阶段被调用,允许开发者在合适的时机执行代码。例如,created 钩子在组件实例创建之后立即调用,而 mounted 钩子在 DOM 挂载完成后调用。了解这些钩子函数有助于优化组件的性能和响应性。

🦆
在 Vue 中,如何使用 mixins?它有哪些优缺点?

mixins 是一种代码复用的技术,可以在多个组件之间共享逻辑。在使用 mixins 时,可以将通用的逻辑封装到 mixin 对象中,然后在需要的组件中引入。它的优点是减少代码重复,但缺点是容易导致命名冲突,且组件的来源不够明确,可能降低代码的可读性。

🦆
Vue 组件通信有哪些方式?

Vue 组件之间的通信方式有多种,包括父子组件通过 props 和 $emit 事件进行通信、兄弟组件通过事件总线(event bus)进行通信、Vuex 用于全局状态管理、以及 provide/inject 用于祖先组件和后代组件之间的通信。每种通信方式适用于不同的场景,了解这些方法可以帮助开发者更好地构建和管理复杂的 Vue 应用。

🦆
Vue Router 中的导航守卫是什么?有哪些种类?

Vue Router 中的导航守卫用于控制路由切换的过程,可以在路由跳转前后执行逻辑。主要有全局守卫(beforeEach、afterEach)、路由独享守卫(beforeEnter)和组件内守卫(beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave)。这些守卫可以用来验证用户权限、记录页面跳转信息、或者在路由切换时进行清理工作。