vue2常见的面试题---中 !!

  1. data为什么是一个函数而不是对象

答:因为组件是可以复用的,js里对象是引用关系,如果组件data是一个对象,那么子组件中的data属性值会互相污染,产生副作用。

因为函数有独立的作用域,所以一个组件的data选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝,new Vue的实例是不会被复用的,因此不存在以上问题

  1. Vue 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决?

答:不会添加上去

解决:因为一开始就设置成了响应式数据,新添加的数据没有通过object.defineproperty()设置成响应式数据

  1. Vue中封装的数组方法有哪些,其如何实现页面更新

答:方法:push(),pop(),unshift(),splice(),sort(),reverse()

页面更新:重写了数组中的那些原生方法,首先获取到这个数组的_ob_,也就是他的Observer对象,如果有新的值,就调用observeArray继续对新的值观察变化,然后手动调用notify,通知渲染watcher,执行update。

  1. vue初始化页面闪动问题

答:在vue初始化的时候,由于div是不归vue管的,在解析代码的时候会出现花屏现象,呈现出类似于{{text}}的字样。

我们可以通过[v-cloak]{display:none}来解决

  1. Vue3.0有什么更新

答:1.监测机制的改变:带来基于代理Proxy的observer实现

2.只能监测属性,不能监测对象

3.模板:把作用域插槽改成了函数的方式,提升了渲染的性能

4.对象式的组件声明方式

5.支持自定义渲染器

16.defineProperty和proxy的区别 

答:defineProperty:添加或删除对象的属性时,vue检查不到,因为添加或删除的对象没有在初始化进行响应式处理,只能通过$set来调用Object.defineProperty()处理,无法监控到数组下标和长度的变化

Proxy:可以监听同级结构下的所以属性变化,包括新增属性和删除属性,可以监听数组的变化

17.Vue3.0 为什么要用 proxy?

答:在vue3.0中使用proxy实现了以下特点:

1.不需要使用vue.$set或vue.$delete触发响应式

2.全方位的数组变化检测,消除了vue2无效的边界情况

3.支持Map,set,weakMap和WeakSet

18.对虚拟DOM的理解?

答:他是一层对真实DOM的抽象,以JavaScript对象(VNdoe节点),作为基础的树,用对象的属性来描述节点,最终可以通过一系列操作使这颗树映射到真实的环境上

  1. 为什么要用虚拟DOM

答:因为DOM是很慢的,其元素是非常庞大的,页面的性能问题大部分是又DOM操作引起的,真实的DOM节点,哪怕一个最简单的div也包含着很多的属性,可以打印出来直观地感受一下操作DOM的代价是昂贵的,频繁操作还会出现页面卡顿,影响用户的体验

  1. DIFF算法的原理

答:在diff中,只对同层的子节点进行比较,放弃跨级的节点比较,使得复杂抵值,也就是说,只有当新旧children都为多个子节点时才需要用核心的Diff算法进行同级比较

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值