Vue面试题详解(1)


2020/3/12 Vue

# 1. 谈一下你对mvvm的理解?

# 2. 请说一下响应式数据的原理?

# 3. vue中是如何检测数组变化?

# 4. 为何vue采用异步渲染?

  • 因为如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染.所以为了性能考虑。 Vue 会在本轮数据更新后,再去异步更新视图!

# 5. nextTick实现原理?

  • nextTick方法主要是使用了宏任务和微任务,定义了一个异步方法.多次调用nextTick 会将方法存入 队列中,通过这个异步方法清空当前队列。 所以这个 nextTick 方法就是异步方法

# 6. vue中computed的特点

  • 默认 也是一个 是具备缓存的,只要当依赖的属性发生变化时才会更新视图

# 7. watch中的deep:true 是如何实现的

# 8. vue组件的生命周期

  • 每个生命周期什么时候调用的
  • 每个生命周期内可以做什么事情

# 9. ajax放在那个生命周期内?

  • 在created的时候,视图中的 dom 并没有渲染出来,所以此时如果直接去操 dom 节点,无法找到相 关的元素
  • 在mounted中,由于此时 dom 已经渲染出来了,所以可以直接操作 dom 节点
  • 一般情况下都放到 mounted 中,保证逻辑的统一性,因为生命周期是同步执行的, ajax 是异步执行的
  • 服务端渲染不支持mounted方法,所以在服务端渲染的情况下统一放到created中

# 10. 合适调用beforeDestroy?

  • 可能在当前页面中使用了 $on 方法,那需要在组件销毁前解绑。
  • 清除自己定义的定时器
  • 解除事件的绑定 scroll mousemove ....

# 11. vue中模版编译的原理

# 12. vue中v-if和v-show的区别

# 13. 为什么v-if和v-for不能连用

# 14. 用vnode来描述一个DOM结构

# 15. diff算法的时间复杂度

# 16. 简述vue中diff算法原理

asphyxia
逆时针向